1

我正在编写一个脚本,该脚本将 MKV 或 AVI 等视频文件更改为 MP4,然后从网络流媒体中准备它们。我希望我的输出使用 H.264 和 AAC 编解码器。

到目前为止,我的命令如下所示:

ffmpeg -i input.mkv -vcodec h264 -acodec aac -ab 128k -ac 2 -strict -2 output.mp4

但是,当编解码器已经是 h.264 时,它仍然会对其进行多路复用,它会显示:(h264 -> libx264)。

如果我用'-vcodec copy'替换'-vcodec h264',当编解码器是H.264时它会快得多,但如果输入文件中有不同的编解码器,当然不会更改编解码器。

FFmpeg 有没有办法识别编解码器几乎相同,因此不会混合视频流,但如果源不是 H.264,仍会更改视频编解码器?

4

1 回答 1

1

不能。FFmpeg 只能复制比特流重新编码。它无法猜测您是否要保留某个编解码器。您必须解析文件信息,然后决定是否要复制。

此处列出了如何执行此操作的一些示例:MKV 到 MP4 转码脚本问题

基本上,你可以这样做(来自@evilsoup 的无耻插件):

ffprobe input.mkv 2>&1 | sed -n '/Video:/s/.*: \([a-zA-Z0-9]*\).*/\1/p' | sed 1q'

这将输出h264H.264 视频流。

小提示:尝试习惯于指定所需的确切编码器。h264不是真正的 FFmpeg 编码器——它默认为libx264. 所以宁可使用-c:v libx264.
还有一件事:aac是 FFmpeg 的内置 AAC 编码器。第三方编码器喜欢libfdk_aaclibfaac提供 VBR 编码模式,并且质量通常比aac.

于 2013-03-10T21:41:52.707 回答