ffmpeg - 替换视频中的音频

qub*_*dup 118 audio video ffmpeg

如何使用ffmpeg使用音频文件替换视频文件中的音频?

我想象命令看起来像:

ffmpeg -i v.mp4 -i a.wav -MAGIC video-new.mp4
Run Code Online (Sandbox Code Playgroud)

这与如何用多个音频流替换视频文件中的音频流非常相似但是这个问题处理多个音轨,这使它变得非常复杂,使得不清楚解决方案的哪一部分足以进行简单的音频交换。

qub*_*dup 169

您将希望在不重新编码的情况下复制视频流以节省大量时间,但重新编码音频可能有助于防止不兼容:

ffmpeg -i v.mp4 -i a.wav -c:v copy -map 0:v:0 -map 1:a:0 new.mp4
Run Code Online (Sandbox Code Playgroud)

-map 0:v:0将第一个(索引0)视频流从输入映射到输出中的第一个(索引0)视频流。

-map 1:a:0将第二个(索引1)音频流从输入映射到输出中的第一个(索引0)音频流。

如果音频比视频长,您需要-shortest在输出文件名之前添加。

不指定音频编解码器,将自动选择一个工作的。您可以通过例如添加-c:a libvorbisafter来指定一个-c:v copy。您也可以使用-c copy来避免重新编码音频,但这在我过去导致了兼容性和同步问题。

  • 或者直接使用`-c copy`来重新混合音频和视频而不重新编码任何流^^ (13认同)
  • @almcnicol - 如果我们要替换的音频文件具有相同或兼容的编解码器,则不需要重新编码,并且`ffmpeg -i v.mp4 -i a.m4a -c copy -map 0:v:0 -map 1:a:0 new.mp4` 就足够了。或者,如果这 2 个流将被混合到一个 `.mkv` 容器中,那么在上面的代码中,我们可以将 `.m4a` 替换为问题的原始 `.wav`,将 `new.mp4` 替换为 `新的.mkv`。 (10认同)
  • 我同意 Francesco 使用 `-c copy` 而不是 `-c:v copy`。 `-c:v copy` 表示仅复制视频,这意味着重新编码音频。 `-c copy` 将复制视频和音频,不重新编码。 (4认同)
  • 就像魅力一样! (2认同)