web-dev-qa-db-ja.com

MP4Box / ffmpegを使用してオーディオとビデオを同期してファイルを連結する

2つのH.264エンコードMPEG-4ファイルを連結する必要があります。最初にファイルが同じようにエンコードされていることを確認することで、このタスクにMP4Boxを使用しています(比較するまでも行っています)ビデオトラックのh264_parseからの出力)そして次のコマンドと連結します:

MP4Box -cat file1.mp4 -cat file2.mp4 output_file.mp4

これは機能し、出力ファイルは再生可能ですが、QuicktimeまたはVLCで再生すると、2番目のビデオのオーディオの開始が早すぎて、連結ファイルの2番目の部分全体が同期しなくなります。

Ffmpegを介して出力を-vcodec copy-acodec copyで再エンコードしようとしましたが、同期の問題が解決しません。

また、最初にMPEG-2形式に変換して、単純なcat file1.mpg file2.mpg > output.mpgと連結し、結果をffmpegで再エンコードしてみました。これはさらにひどいものでした。

MP4Boxにコマンドを渡してオーディオトラックの開始時間を調整できることは知っていますが、これをプログラムで任意の入力ビデオに対して実行しようとしています(もちろん同じエンコーディングで)。私は人間の介入/手動調整を必要としない可能な解決策を探しています。または、少なくとも、連結されたビデオの2番目の部分が同期しなくなるために何が起こっているのかを理解します。

4
Jesse L

私も同じ問題に直面しました。正しく同期するには、MP4Boxコマンドを次のように記述する必要があります。

MP4Box -add file1.mp4 -cat file2.mp4 -new output_file.mp4

-catを使用する代わりに、最初のビデオの前に-addを使用します。残りのオプションは正しく、出力ビデオパラメータの前に-newを置くことができます。

7
Ajith S Nair

Matroskraビデオコンテナ(MKV)を使用してみてください。

まず、 mkvtoolnix が必要です。ダウンロードしてインストールしてから、mkvmerge GUIを起動する必要があります(コマンドラインツールが好きでない限り、私はこれで問題ありませんが、 ファイルリンクセクション の-を確認することをお勧めします。 mkvmergeドキュメント )。

「追加」をクリックして最初のファイルを追加します。次に、「追加」をクリックして、2番目のファイルを開きます。出力ファイルを設定し、下部にある[Muxingを開始]をクリックすると、すぐに使用できます。

コンテナがニーズに合わない場合は、再エンコードするか、他の形式に変換してみてください... MKVはとても素敵なコンテナですが!

1
Breakthrough

Mkvtoolnixパッケージから、mkvmergeを使用します。

mkvmerge -o "output file" "input file" +"appended file"
0
cdavidyoung