由于兼容性问题,我需要重新编码一些视频文件。它们目前是具有h.264视频和ac3-a52音频的mkv文件。我想保留h.264视频,将容器转换为m4v并创建两个音频轨道,一个带有原始的ac3-a52,另一个用它复制,但是在aac立体声中。
我假设必须有某种音频流映射命令,但我不知道如何同时映射和重新编码。我应该在ffmpeg中输入什么命令才能实现这个目标?
另外,ac3和ac3-a52有什么区别? Apple TV仍然可以通过ac3-a52还是必须转换为ac3?
答案 0 :(得分:11)
这对我有用:
ffmpeg -y -i Source.mkv -map 0:v -c:v copy -map 0:a -c:a copy -map 0:a -strict -2 -c:a aac out.mkv
-y
- 覆盖输出文件的全局选项(如果已存在)。-map 0:v
- 将第一个输入中的视频流指定为输出文件的来源。-c:v copy
- Stream copy视频。这只是将输入复用到输出。不会发生重新编码。-map 0:a
- 将第一个输入的音频流指定为输出文件的来源。-c:a copy
- Stream copy音频。这只是将输入复用到输出。不会发生重新编码。-strict -2 -c:a aac
- 使用原生FFmpeg AAC音频编码器。需要-strict -2
作为您确认编码器被指定为实验的方式。它不是一个伟大的编码器,但在更高的比特率下也不算太糟糕。根据wikipedia,AC3和ATSC A / 52之间没有区别:第一个是编解码器的名称,第二个是指定AC3编解码器的标准名称。也许有人对此有更多的了解?
答案 1 :(得分:1)
我和OP一样,但是使用的是m4v容器。我正在使用MacPorts" nonfree" ffmpeg的变体,以便我可以使用libfaac,它提供比内置AAC编码器更好的音频质量,并且也有与@dkam相同的问题。我结束使用的命令行是这样的:
ffmpeg -i input.m4v -map 0:v -c:v copy -map 0:a -c:a:0 copy -map 0:a -c:a:1 libfaac output.m4v
(视频用于在iPad上播放,似乎无法处理ac3。)