我有一个 mp4 文件中的视频文件,编码为 H.264,还有一个 webm 文件中的音频文件,编码为 Opus。将这些文件合并为一个 mp4 的最佳方法是什么?我不想重新编码文件并损失质量。
答案1
使用 FFmpeg 可以相对轻松地完成此操作。如果您使用的是 Xenial Xerus LTS,只需运行以下命令:
sudo apt-get install ffmpeg
但是如果你正在运行 Trusty Tahr LTS,你最好从这些简单的复制并粘贴说明...
为了演示该技术,我创建了两个测试文件:
此文件
test.mp4
具有您想要的 h.264 流,且采用以下格式,请仔细记下流标识符:Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661) ... Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D)...
这个文件
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
这将实现以下目的:
-c copy
复制编解码器没有转码-map 0:0
选择第一个输入文件:第一个流 = 所需的 h.264 流-map 1:1
选择第二个输入文件:第二个流 = 所需的 Opus 流-shortest
当最短输入流结束时停止编码
对于更复杂的方法多流文件需要请参阅我的参考资料中的链接...
参考:
答案2
由于 Opus 不符合 MP4 容器标准,并且 H.264 同样不适合 WebM(受限制的 MKV)容器,因此您必须使用 MKV,并希望播放器支持 Opus 音轨。
重新混合非常简单,只需打开 Mkvmerge GUI,将两个文件拖入并选择要在输出中包含的特定曲目即可。但没有人会阻止您研究命令行实用程序所涉及的所有选项(新 GUI 应该仍具有复制整个命令的选项)或学习使用 ffmpeg。