我有一部 4.3 GB 的 720p 电影,想将带有 DTS 声音的 MKV 转换为带有 AAC 或 AC3 音频的 MP4 视频。
我有时会得到:
ffmpeg: unrecognized option '-c:v'
…和:
aac unrecognized
以及其他类似的东西。
我希望这部电影的尺寸像 torrent 网站上的一样小。
答案1
确保你运行的是最新版本的FFmpeg。对于 Windows 和 Linux,可从主页获取静态构建。对于 macOS,您可以通过以下方式安装 FFmpeg自制。
然后,在最简单的情况下运行:
ffmpeg -i input.mkv -c:v libx264 -c:a aac out.mp4
设置视频质量
为了控制视频质量,设置参数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 …
对于音频,您也可以使用 设置比特率-b:a
。
多声道音频
如果您的音频流使用多个通道(例如 5.1 声音),则需要使用另一个 AAC 编码器(libfdk_aac
)。此编码器在静态版本中不可用,但可以通过预打包/Homebrew 版本的 ffmpeg 获得。
ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a libfdk_aac -b:a 384k out.mp4
复制所有流
如果您的输入文件包含多个视频、音频和字幕流,ffmpeg 默认不会转换它们全部。
用于-map 0
指示 ffmpeg 从输入文件中获取所有流(参见FFmpeg 维基了解更多信息)。这对于保留原文中可能存在的不同语言和字幕非常有用。
ffmpeg -i input.mkv -c:v libx264 -c:a aac -map 0 out.mp4
答案2
您可以这样做:
ffmpeg -i input.mkv -c:v copy -c:a libfaac out.mp4
或者如果没有效果,尝试修复内部比特流
转换为立体声和升序:
ffmpeg -i input.mkv -c:v copy -c:a libfaac \
-bsf:a aac_adtstoasc -ac 2 -ar 48000 -ab 256k \
out.mkv
如果是 5.1,环绕声和声音很难听到,那是因为对话在中央声道上,而您只能听到来自 R 和 L 声道的离麦克风声音,但音乐和音效却很轰鸣。
您可以使用杜比 II 滤波器来弥补这一点,以将环绕声道切断并将中央声道分离为立体声,然后将它们全部组合成左右立体声道。
ffmpeg -i input.mkv -c:v copy -c:a libfaac -bsf:a aac_adtstoasc \
-af aresample=matrix_encoding=dplii -ac 2 -ar 48000 -ab 256k \
out.mkv
答案3
MKV 只是一个容器。.mkv
容器内可以存放 MPEG-4 视频。
我的建议是这样的:
将文件推送到.mkv
容器:
mkvmerge -o newfile.mkv inputfile.m4v
获取mkvdts2ac3.sh
脚本可在此处获得并运行此命令:
mkvdts2ac3.sh newfile.mkv
完毕!
我的电视支持 AC3,但不支持 DTS,所以这个设置对我来说很有效。
请注意,mkvdts2ac3.sh
有一些非常基本的依赖项要求。运行脚本时您会看到它们。