当未指定编解码器时,ffmpeg的默认编解码器是什么?

15

如果我导入一个文件用于ffmpeg,但没有指定任何流的编解码器信息,ffmpeg会执行任何操作吗?默认操作是只复制编解码器吗?还是ffmpeg会使用默认编解码器对输入文件进行编码?

以下两个命令是否相同?还是第二个会重新编码并且需要很长时间?

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

ffmpeg -i input.mkv output.mp4
2个回答

18
如果我导入一个文件到ffmpeg中,但没有指定任何流的编解码器,ffmpeg会做什么?
ffmpeg将使用默认编码器重新编码输入中的每个流。所使用的编码器取决于您如何配置ffmpeg。例如,如果可用,则对于mp4输出,默认编码器将是libx264,但如果不可用,则将使用mpeg4。默认情况下,ffmpeg只会重新编码每种类型的一个流,并忽略其余的流(请参见stream selection)。
在您的两个命令中,第一个命令将使用stream copy mode来处理视频和音频。而第二个命令将重新编码。

如果我导入一个已经有h.264视频流的mp4文件,会尝试重新编码它吗?还是只是复制它,认识到它已经是默认编解码器,不做任何改变但仍需要很长时间? - sion
3
除非你特别指定,否则 ffmpeg 总是会重新编码。 - llogan
1
大多数情况下,输出格式是否会有质量损失取决于它本身。无损格式是个例外,但如果需要色彩空间转换,仍然可能会出现质量损失。然而,例如,如果您将输出为有损的H.264视频,并使用正确的选项,您可能能够使其看起来“视觉上无损”;这意味着它在技术上并不是无损的,但它足够好,大多数人都看不出区别。请参阅FFmpeg和x264编码指南 - llogan
2
所使用的编码器取决于您如何配置ffmpeg:那么哪里有解释它的文档呢?对于音频和视频都是吗? - Camille Goudeseune
2
我一定是太蠢了。那份文档仍然没有提到默认值,无论是在“./configure”选项中还是在“ffmpeg -encoders”中都没有。 - Camille Goudeseune
显示剩余2条评论

8
为了找出在您的计算机上第二个命令 ffmpeg -i input.mkv output.mp4 使用的默认编解码器(音频和视频),请按以下步骤操作:
  • 运行该命令,可以使用-t 5 使其更快地完成(只编码 5 秒)。

  • 运行 ffprobe output.mp4。扫描输出以查看使用了哪些编解码器的 "Video" 和 "Audio"。例如,我的 Ubuntu 12 安装使用 h264 和 aac。


5
谢谢。另一个方法是:使用命令ffmpeg -h muxer=mp4可以打印出一个混合器默认使用的编解码器。在我的机器上,它打印出默认视频编解码器:h264; 默认音频编解码器:aac。当然,它只提供编解码器,而不是实际使用的编码器。例如,使用-h encoder=h264可以显示libx264h264_amfh264_mfh264_nvench264_qsv等选项,这意味着一个编解码器有多个编码器可供选择。 - legends2k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接