Cómo concatenar videos con diferentes velocidades de bits usando ffmpeg

Cómo concatenar videos con diferentes velocidades de bits usando ffmpeg

Quiero concatenar dos archivos que tengan los siguientes resultados de ffmpeg:

archivo1:

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

archivo2:

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

Para concatenarlos, uso el siguiente comando:

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

La concatenación se realiza pero el proceso genera muchas veces:

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.

Al mirar el archivo de salida, la salida de vídeo del primer archivo está bien, pero la renderización de la segunda parte (archivo2) se acelera considerablemente. Con respecto al audio, solo hay una pequeña parte del archivo2 durante el video que sale del archivo1.

Salida ffmpeg del archivo de concatenación:

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 no tiene audio, por lo que no necesito su salida de audio. Puedo codificar el archivo1 de manera diferente, pero prefiero mantener el archivo2 como está.

Respuesta1

No estoy seguro de tener la solución, pero como nadie más respondió (debería comentar en lugar de responder, pero mi puntaje no es lo suficientemente alto para eso)...

Una vez encontré un problema similar y pude resolverlo usando el formato MKV en lugar del formato MP4 para los archivos de entrada. Intente convertir file1.mp4 a file1.mkv con ffmpeg -i file1.mp4 -c copy file1.mkvy luego concatene los dos archivos MKV.

(Por cierto, el título es incorrecto: el problema no es "diferentes velocidades de bits" sino "diferentes velocidades de fotogramas")

información relacionada