将带有 DTS 声音的 MKV 转换为带有 AAC 或 AC3 音频的 MP4 视频

dal*_*ale 14 ffmpeg aac ac3 matroska

我有一部 4.3 GB 720p 电影,想将此带有 DTS 声音的 MKV 转换为带有 AAC 或 AC3 音频的 MP4 视频。

我有时会得到:

ffmpeg: unrecognized option '-c:v'
Run Code Online (Sandbox Code Playgroud)

…和:

aac unrecognized
Run Code Online (Sandbox Code Playgroud)

¬和其他类似的东西。

我希望这部电影像在 torrent 网站上找到的那样小。

slh*_*hck 20

确保您运行最新版本的FFmpeg。对于 Windows 和 Linux,可以从主页获得静态构建。对于 macOS,您可以通过Homebrew安装 FFmpeg 。

然后,在最简单的情况下运行:

ffmpeg -i input.mkv -c:v libx264 -c:a aac out.mp4
Run Code Online (Sandbox Code Playgroud)

设置视频质量

为了控制视频质量,设置crf参数,这意味着缺省值为23下更好的质量,但较高的文件大小。尝试 19 到 26 之间的值以查看最适合的值。您还可以设置特定的比特率,具体取决于您想要的文件大小。例如,此处为 500 kBit/s:

ffmpeg -i input.mkv -c:v libx264 -crf 23 …
ffmpeg -i input.mkv -c:v libx264 -b:v 500k …
Run Code Online (Sandbox Code Playgroud)

对于音频,您也可以设置比特率,使用-b:a.

多声道音频

如果您的音频流使用多个声道(例如 5.1 声音),您需要使用另一个 AAC 编码器 ( libfdk_aac)。此编码器在静态版本中不可用,但可以通过 ffmpeg 的预打包/自制版本获得。

ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a libfdk_aac -b:a 384k out.mp4
Run Code Online (Sandbox Code Playgroud)

复制所有流

如果您的输入文件有多个视频、音频和字幕流,默认情况下 ffmpeg 不会转换所有这些流。

使用-map 0指示的ffmpeg采取从输入文件中的所有数据流(见FFmpeg的维基获取更多信息)。这对于保留原始中可能存在的不同语言和字幕很有用。

ffmpeg -i input.mkv -c:v libx264 -c:a aac -map 0 out.mp4
Run Code Online (Sandbox Code Playgroud)