品質を損なうことなくffmpegで2つのmp4ファイルを連結


16

ffmpegを使用して2つのビデオを連結します。私は使っている:

ffmpeg -i output1.mp4 -scodec copy -vbsf h264_mp4toannexb i0.ts

しかし、私が手にしたmp4ファイルは、ソースファイルよりもずっと悪く見えます。

ここに両方の​​ファイルに関する情報があります

   Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output1.mp4':
   Metadata:
   major_brand     : isom
   minor_version   : 1
   compatible_brands: isom
   creation_time   : 2013-06-13 15:40:36
   Duration: 00:00:15.72, start: 0.000000, bitrate: 2053 kb/s
   Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720, 1931 kb/s, 25 fps, 25 tbr,   12800 tbn, 50 tbc
   Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 128 kb/s

  Input #0, mpegts, from 'i0.ts':
  Duration: 00:00:15.64, start: 1.400000, bitrate: 1382 kb/s
  Program 1 
  Metadata:
  service_name    : Service01
  service_provider: Libav
  Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
  Stream #0.1[0x101](und): Audio: mp2, 44100 Hz, stereo, s16, 128 kb/s

この問題を解決するにはどうすればよいですか?


正確に何をしようとしていますか?「連結」という用語は、複数のファイルを結合することを意味しますが、1つの入力output1.mp4、および1つの出力のみを参照していますi0.ts。ts出力コンテナーへのmpeg2videoエンコードは、デフォルトでエンコーダーを使用します(少なくともビルドでは)。前回このエンコーダーのデフォルトのビットレートまたは品質設定を確認した場合-b:v 200k、ほとんどの場合は低すぎます。
llogan

ごめんなさい。次に、ffmpeg -i "concat:i0.ts | i1.ts" output1111.mp4でそれらを連結します。しかし、問題は、私は、TS-ファイル作成時に品質がすでに悪いということである

MPEG-2ビデオに再エンコードする必要はありません。すべての元の入力(output1.mp4など)の形式、フレームレート、およびフレームサイズは同じですか?
llogan

はい、正確に。すべてが等しい

回答:


36

の使用を検討する concatdemuxerの。これにより、一時的な損失のある中間ファイルの作成を回避し、再エンコードの追加ステップをスキップできます。

注意:すべての入力は、同じストリームタイプ(同じ形式、同じタイムベースなど)である必要があります。

  1. テキストファイルを作成し、連結(または「結合」)する各ファイルのパスと名前を含めます。サンプルファイルinput.txt

    file '/home/jenia/input1.mp4'
    file '/home/jenia/input2.mp4'
    file '/home/jenia/input3.mp4'
    
  2. これで、concatデマルチプレクサを使用できます。

    ffmpeg -f concat -i input.txt -codec copy output.mp4
    

この機能がない場合は、ffmpegが古すぎるか、libav forkの「偽の」ffmpegを使用しています。

Linux、OS X、およびWindowsでは、FFmpegダウンロードページから簡単に使用できる静的ビルドを入手できます。または、ステップバイステップガイドに従ってffmpegをコンパイルすることもできます。

参照:


これはまさに私が望んでいたことであり、iPhone 6から2つの.movファイルをマージするのに役立ちました。ありがとう。
ライアン

7

最も速い1ライナーは次のとおりです。

ls Movie\ Part\ * | while read line; do echo file \'$line\'; done | ffmpeg -f concat -i - -c copy output.mp4

Windowsのコマンドライン用のそのような1オンラインを取得する機会はありますか?
PeterCo

2
Linuxでは、このonelinerを使用しましたffmpeg -safe 0 -f concat -i <(find . -type f -name '*' -printf "file '$PWD/%p'\n" | sort) -c copy output.mkv(mkvはmp4よりも多くのコーデックを受け入れますが、mp4で試すこともできます)。これ-safe 0は、安全でないファイル名について不平を言っている最近のffmpegバージョン用であり、-type fファイルのみをリストするためのものです。| sortファイルをアルファベット順にソートするために追加しました。理由は、findファイルシステム上に保存されたとして、それらを順番に読み込みます。空白を含むファイルでも機能します。
エリック16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.