我正在编写一个脚本,它采用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时它会更快,但如果输入文件中有不同的编解码器,当然不会改变编解码器。 / p>
FFmpeg是否有办法识别编解码器几乎相同,因此不会复制视频流,但如果源不是H.264,仍会改变视频编解码器?
答案 0 :(得分:0)
没有。 FFmpeg只能复制比特流或重新编码。它无法猜测您是否要保留某个编解码器。您必须解析文件信息,然后决定是否要复制。
此处列出了一些如何执行此操作的示例:MKV to MP4 transcoding script issues
基本上,你可以这样做(来自@evilsoup的无耻插件):
ffprobe input.mkv 2>&1 | sed -n '/Video:/s/.*: \([a-zA-Z0-9]*\).*/\1/p' | sed 1q'
这将为H.264视频流输出h264
。
小提示:尝试习惯指定所需的确切编码器。 h264
并不是FFmpeg的编码器 - 默认为libx264
。所以请使用-c:v libx264
。
还有一件事:aac
是来自FFmpeg的内置AAC编码器。像libfdk_aac
或libfaac
这样的第三方编码器提供VBR编码模式,质量通常比aac
更好。