ffmpeg を使用して異なるビットレートのビデオを連結する方法

ffmpeg を使用して異なるビットレートのビデオを連結する方法

ffmpeg からの次の出力を持つ 2 つのファイルを連結したいと思います。

ファイル1:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.76.100
  Duration: 00:00:02.01, start: 0.000000, bitrate: 172 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 158 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

ファイル2:

Input #0, matroska,webm, from 'file2.mkv':
  Metadata:
    ENCODER         : Lavf58.20.100
  Duration: 00:01:13.10, start: 0.000000, bitrate: 418 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 1k tbn, 60 tbc (default)
    Metadata:
      DURATION        : 00:01:13.100000000
    Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp (default)
    Metadata:
      title           : simple_aac_recording
      DURATION        : 00:01:13.002000000

これらを連結するには、次のコマンドを使用します。

ffmpeg -f concat -safe 0 -i concat.txt -c copy output.mp4

連結は完了しましたが、プロセスは何度も出力します:

Non-monotonous DTS in output stream 0:1; previous: 99677, current: 76011; changing to 99678. This may result in incorrect timestamps in the output file.

出力ファイルを見ると、最初のファイルからのビデオ出力は問題ありませんが、2 番目の部分 (file2) のレンダリングがかなり高速化されています。オーディオに関しては、file1 から出力されるビデオの間に file2 の小さな部分しかありません。

連結ファイルからのffmpeg出力:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:05.94, start: 0.000000, bitrate: 5210 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 2787 kb/s, 377.45 fps, 50 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 6750 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

file1 にはオーディオがないので、オーディオ出力は必要ありません。file1 を別の方法でエンコードすることもできますが、file2 はそのままにしておきます。

答え1

解決策があるかどうかはわかりませんが、誰も答えていないので(答えるのではなくコメントするべきですが、私のスコアではそこまで高くありません)...

以前、同様の問題に遭遇したことがありますが、入力ファイルに MP4 形式ではなく MKV 形式を使用することで解決できました。そこで、 を使用して file1.mp4 を file1.mkv に変換し ffmpeg -i file1.mp4 -c copy file1.mkv、2 つの MKV ファイルを連結してみてください。

(ちなみにタイトルは間違っています。問題は「異なるビットレート」ではなく「異なるフレームレート」です)

関連情報