Ffmpeg复制音频流并对此新流进行编码

Sam*_*Sam 8 mapping audio ffmpeg

由于兼容性问题,我需要重新编码一些视频文件.它们目前是具有h.264视频和ac3-a52音频的mkv文件.我想保留h.264视频,将容器转换为m4v并创建两个音轨,一个使用原始的ac3-a52,另一个是从a32立体声中复制的.

我假设必须有某种音频流映射命令,但我不知道如何同时映射和重新编码.我应该在ffmpeg中输入什么命令来实现这一目标?

另外,ac3和ac3-a52有什么区别?Apple TV仍然可以通过ac3-a52还是必须转换为ac3?

AJ2*_*J29 13

这对我有用:

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
Run Code Online (Sandbox Code Playgroud)
  • -y - 覆盖输出文件的全局选项(如果已存在).
  • -map 0:v - 将第一个输入中的视频流指定为输出文件的源.
  • -c:v copy- 流复制视频.这只是将输入复用到输出.不会发生重新编码.
  • -map 0:a - 将第一个输入中的音频流指定为输出文件的源.
  • -c:a copy- 流复制音频.这只是将输入复用到输出.不会发生重新编码.
  • -strict -2 -c:a aac - 使用原生FFmpeg AAC音频编码器.-strict -2作为一种方式,您需要确认编码器被指定为实验编码.它不是一个伟大的编码器,但在更高的比特率下也不算太糟糕.

根据维基百科,AC3和ATSC A/52之间没有区别:第一个是编解码器的名称,第二个是指定AC3编解码器的标准名称.也许有人对此有更多的了解?

  • 我发现我需要使用-c:a:0和-c:a:1作为输出流,或者它们最终都是aac (3认同)

mar*_*hep 6

我正在做与 OP 相同的操作,但使用的是 m4v 容器。我正在使用 ffmpeg 的 MacPorts“非自由”变体,以便我可以使用 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。)