我今天注意到,我可以使用ffmpeg
不指定编解码器来编码或转码视频和音频流,因为它似乎暗示了从输出的扩展中编码或转码的视频或音频编解码器。这意味着:
ffmpeg "input.mp3" -c:a aac "output.m4a"
...可以替换为:
ffmpeg "input.mp3" "output.m4a"
此外:
ffmpeg "input.dts" -c:a copy -ac 2 "output.dts"
...可以替换为:
ffmpeg "input.dts" -ac 2 "output.dts"
鉴于始终明确地包含编解码器是我见过的最流行的使用方式ffmpeg
- 特别是在这个网站上 - 我想知道是否有理由出现这种情况。
以这种方式使用编码时,是否有任何可能的陷阱需要考虑ffmpeg
?是否可以安全地假设它会导致与明确指定编解码器完全相同的转换?
答案1
最好指定编码器
一些默认选择是遗留的或奇怪的。例如:
flv1
被选为 FLV 输出。大多数人期望 H.264 (libx264)。flac
被选为 OGG/OGA 输出。大多数人希望使用 Vorbis (libvorbis)。
用作输出格式的默认编码器可能取决于编译时使用的配置选项
ffmpeg
。因此,如果您ffmpeg
没有--enable-libx264
,则对于 MP4,将使用编码器 mpeg4(MPEG-4 第 2 部分视频)而不是 libx264(H.264 视频)。大多数人使用ffmpeg
包含对最流行库的支持的版本,但这种情况偶尔会发生。具体来说,工作量并不大。
但有时你可能会懒惰
如果你知道选择什么编码器,或者检查并验证,那么你可以节省一些按键。请参阅流映射在控制台输出中查看编码器ffmpeg
使用的内容。例如:
ffmpeg -i input.foo output.mp4
...
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
在这种情况下,它使用 libx264 编码器来处理视频(-c:v libx264
),并使用本机 AAC 编码器来处理音频(-c:a aac
)。
您可以查看特定多路复用器的详细信息,以了解默认将使用哪些编解码器:
ffmpeg -h muxer=mp4
...
Muxer mp4 [MP4 (MPEG-4 Part 14)]:
Default video codec: h264.
Default audio codec: aac.
答案2
是否可以安全地假设它会导致与明确指定编解码器完全相同的转换
不一定。它是“安全的”,因为您将获得一个可以正常工作的文件。Ffmpeg 将选择适用于该容器的首选编解码器。但是,使用不同的文件扩展名可能会选择不同的编解码器。此外,首选编解码器将来可能会发生变化,或者取决于 Ffmpeg 的编译方式。