将 H.264 视频和 opus 音频流合并为单个视频文件

将 H.264 视频和 opus 音频流合并为单个视频文件

我有一个 mp4 文件中的视频文件,编码为 H.264,还有一个 webm 文件中的音频文件,编码为 Opus。将这些文件合并为一个 mp4 的最佳方法是什么?我不想重新编码文件并损失质量。

答案1

使用 FFmpeg 可以相对轻松地完成此操作。如果您使用的是 Xenial Xerus LTS,只需运行以下命令:

sudo apt-get install ffmpeg

但是如果你正在运行 Trusty Tahr LTS,你最好从这些简单的复制并粘贴说明...

为了演示该技术,我创建了两个测试文件:

  1. 此文件test.mp4具有您想要的 h.264 流,且采用以下格式,请仔细记下流标识符:

    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661) ...
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D)...
    
  2. 这个文件test1.webm具有您想要的 Opus 流,并且采用以下格式,请再次仔细记下流标识符:

    Stream #0:0: Video: vp9 (Profile 0)...
    Stream #0:1: Audio: opus, 48000 Hz, stereo, fltp (default)
    

笔记:在您的示例中,webm 容器可能仅包含带有没有视频流. 在这种情况下,您的 Opus 音频流将具有标识符Stream #0:0

还要记住的是眼下您无法将 Opus Audio 放入 mp4 容器中,但它可以很好地放在 mkv 容器中。以下是最简单的方法:

ffmpeg -i test.mp4 -i test1.webm -c copy -map 0:0 -map 1:1 -shortest out.mkv

这将实现以下目的:

  1. -c copy复制编解码器没有转码
  2. -map 0:0选择第一个输入文件:第一个流 = 所需的 h.264 流
  3. -map 1:1选择第二个输入文件:第二个流 = 所需的 Opus 流
  4. -shortest当最短输入流结束时停止编码

对于更复杂的方法多流文件需要请参阅我的参考资料中的链接...

参考:

答案2

由于 Opus 不符合 MP4 容器标准,并且 H.264 同样不适合 WebM(受限制的 MKV)容器,因此您必须使用 MKV,并希望播放器支持 Opus 音轨。

重新混合非常简单,只需打开 Mkvmerge GUI,将两个文件拖入并选择要在输出中包含的特定曲目即可。但没有人会阻止您研究命令行实用程序所涉及的所有选项(新 GUI 应该仍具有复制整个命令的选项)或学习使用 ffmpeg。

相关内容