web-dev-qa-db-ja.com

h.264ビデオとopusオーディオストリームを単一のビデオファイルに結合する

Mp4ファイルにはH.264としてエンコードされたビデオファイルがあり、webmファイルにはOpusとしてエンコードされたオーディオがあります。これらのファイルを1つのmp4に結合する最良の方法は何でしょうか?ファイルを再エンコードして品質を失いたくありません。

4
Qwertie

これはFFmpegで比較的簡単に行えます。 Xenial Xerus LTSを使用している場合は、次を実行するだけです。

Sudo apt-get install ffmpeg

ただし、Trusty Tahr LTSを実行している場合は、これらの単純な コピーと貼り付けの手順...

この手法を実証するために、2つのテストファイルを作成しました。

  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になります。

現時点ではmp4コンテナにOpus Audioを入れることはできませんが、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 1番目の入力ファイルを選択します。1番目のストリーム=目的のh.264ストリーム
  3. -map 1:1 2番目の入力ファイルを選択:2番目のストリーム=目的のOpusストリーム
  4. -shortest最短の入力ストリームが終了するとエンコードを停止します

マルチストリームファイルでが必要となるより複雑なメソッドについては参照のリンクを参照してください...

参照:

3
andrew.46

OpusはMP4コンテナ標準に準拠しておらず、H.264も同様にWebM(制限付きMKV)コンテナでは不適切であるため、MKVを使用し、プレーヤーがOpusオーディオトラックをサポートすることを期待する必要があります。

再多重化は、Mkvmerge GUIを開いて両方のファイルをドラッグし、出力に含める特定のトラックを選択するのと同じくらい簡単です。しかし、コマンドラインユーティリティに関連するすべてのオプションの調査(新しいGUIにはコマンド全体をコピーするオプションが必要です)やffmpegの使用方法の学習を止めることはできません。

2
LiveWireBT