So verketten Sie Videos mit unterschiedlichen Bitraten mit ffmpeg

So verketten Sie Videos mit unterschiedlichen Bitraten mit ffmpeg

Ich möchte zwei Dateien mit den folgenden ffmpeg-Ausgaben verketten:

Datei1:

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

Datei2:

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

Um sie zu verketten, verwende ich den folgenden Befehl:

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

Die Verkettung ist abgeschlossen, aber der Prozess gibt viele Male aus:

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.

Beim Betrachten der Ausgabedatei ist die Videoausgabe der ersten Datei in Ordnung, aber das Rendern des zweiten Teils (Datei2) ist erheblich beschleunigt. Was den Ton betrifft, gibt es nur einen kleinen Teil von Datei2, während das Video aus Datei1 kommt.

ffmpeg-Ausgabe aus der Verkettungsdatei:

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

Datei1 hat keinen Ton, daher brauche ich die Audioausgabe nicht. Ich kann Datei1 anders kodieren, aber ich würde Datei2 lieber so lassen, wie sie ist.

Antwort1

Ich bin nicht sicher, ob ich die Lösung habe, aber da niemand sonst geantwortet hat (ich sollte kommentieren, anstatt zu antworten, aber mein Score ist dafür nicht hoch genug) …

Ich hatte einmal ein ähnliches Problem und konnte es lösen, indem ich für die Eingabedateien das MKV-Format anstelle des MP4-Formats verwendete. Versuchen Sie also, file1.mp4 mit in file1.mkv zu konvertieren ffmpeg -i file1.mp4 -c copy file1.mkvund dann die beiden MKV-Dateien zu verknüpfen.

(Übrigens ist der Titel falsch: Das Problem sind nicht „unterschiedliche Bitraten“, sondern „unterschiedliche Bildraten“)

verwandte Informationen