将mkv转换为h264格式的FFmpeg

17

编辑: 这个问题变得非常受欢迎,是搜索“使用ffmpeg将mkv转换为h264”的顶级结果之一,因此我认为适当的做法是为那些偶然发现这个问题的人提供以下建议:

请使用

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

由于最近的FFmpeg版本中删除了libvo_aacenc编码器,现在它具有本地的AAC编码器。如需更多信息,请访问FFmpeg AAC编码维基页面。

以下是原问题:

我想使用FFmpeg将我的.mkv文件转换为.mp4文件。我尝试了以下代码:

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

但是我收到了以下错误:

打开输出流#0:1的编码器时出错 - 可能是不正确的参数,如比特率、速率、宽度或高度。

有什么办法可以解决这个问题吗?我尝试设置音频的比特率,但问题似乎仍然存在。


相关链接:https://superuser.com/questions/639983/avconv-cant-convert-stream-to-mp4-file-fails-with-unable-to-set-encoding-para - Blender
正如错误提示所说,您的参数不正确(或缺失)。请参考:https://trac.ffmpeg.org/wiki/Encode/H.264 - Maxito
1
mkv 是一种视频容器,而 H.264 则是一种编码格式。你不能将一个容器转换为编码。 - Endoro
@Rikus Honey,你有按照这样的方式启用libvo-aacenc吗,就是--enable-libvo-aacenc。为什么不使用免费的libfaaclibfdk_aac呢? - budthapa
2个回答

34

我建议您首先检查您的.mkv文件是否已经具有H.264 / AAC流。 如果是这样,您所要做的就是复制这些流并更改容器:

ffmpeg -i input.mkv -c copy output.mp4
如果不行,可能是因为您的格式与.mp4不兼容而被拒绝了。尝试以下操作以输出H.264 / AAC:
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4

但是,如果你的.mkv文件已经包含H.264/AAC,请使用第一种解决方案。它将更快且具有更好的质量。


1
你可以使用“-codec copy”或者“-c copy”来代替“-vcodec copy -acodec copy”。 - llogan
1
另外,如果您想使用x264进行编码,通常最好设置一些特定的编码设置(预设和某种速率/ q控制方法),请参见https://trac.ffmpeg.org/wiki/Encode/H.264。 - Ronald S. Bultje

3

作为 ffmpeg 的替代方案,您可以使用 HandBrakeCLI,例如:

HandBrakeCLI --encoder "x264" --quality 25.0 --aencoder "copy:aac" --audio-fallback "av_aac" --all-audio --all-subtitles -i "input.mkv" -o "output.mkv"

HandBrakeCLI 是手动安装的工具包 handbrake-cli 的一部分。

有关参数说明,请参见 HandBrakeCLI --help 或 https://handbrake.fr/docs/en/latest/cli/command-line-reference.html


虽然最初的问题是如何使用ffmpeg完成,但这也是一个有效的答案,因为HandBrake本质上确实使用了ffmpeg... 很好的解决方案,谢谢! - luttztfz

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