
Estoy usando ffmpeg 4.2.4.
Tengo dos fragmentos cortos de video, ambos grabados con mi teléfono. Corté una sección de la primera (comenzando a los 18 segundos y también de 18 segundos de duración; el resultado parece tener una duración de 18,02 segundos):
ffmpeg -i VID_20201205_135951.mp4 -ss 00:18 -t 00:18 1.mp4
Y estoy usando todo el segundo, que dura 13,55 segundos:
cp VID_20201205_140804.mp4 2.mp4
Escribí un archivo concat.txt:
file '1.mp4'
file '2.mp4'
Y usé el filtro concat para unirlos:
ffmpeg -f concat -i concat.txt -c copy 12.mp4
¡El vídeo resultante no tiene sonido y dura 3 minutos y 2,35 segundos! Si lo miro, los primeros 18 segundos son correctos (aunque sin sonido), luego se congela, mostrando el último fotograma de la primera parte, hasta el 1:47, momento en el que comienza a reproducirse la segunda parte, pero muy lentamente, hasta el final del vídeo.
¿Alguna idea de lo que estoy haciendo mal? ¿O cómo podría depurar esto?
Aquí está la información que imprime ffmpeg para la primera entrada:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:00:18.02, start: 0.000000, bitrate: 17735 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 3840x2160 [SAR 1:1 DAR 16:9], 17678 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandle
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 69 kb/s (default)
Metadata:
handler_name : SoundHandle
La segunda entrada:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2020-12-05T14:08:20.000000Z
com.android.version: 11
Duration: 00:00:13.55, start: 0.000000, bitrate: 40373 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, smpte170m), 3840x2160, 42298 kb/s, SAR 1:1 DAR 16:9, 30.02 fps, 30 tbr, 90k tbn, 180k tbc (default)
Metadata:
rotate : 180
creation_time : 2020-12-05T14:08:20.000000Z
handler_name : VideoHandle
Side data:
displaymatrix: rotation of -180.00 degrees
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
Metadata:
creation_time : 2020-12-05T14:08:20.000000Z
handler_name : SoundHandle
Y la salida:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '12.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:03:02.35, start: 0.000000, bitrate: 4734 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 3840x2160 [SAR 1:1 DAR 16:9], 4719 kb/s, 5.07 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandle
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 80 kb/s (default)
Metadata:
handler_name : SoundHandle
Respuesta1
Todas las entradas deben tener los mismos atributos. Los suyos tienen diferentes perfiles H.264 (línea de base versus alta) y velocidades de cuadros.
Haz que un vídeo coincida con el otro:
ffmpeg -i 2.mp4 -c:v libx264 -r 30 -c:a copy 2b.mp4
El perfil alto se seleccionará de forma predeterminada, por lo que no es necesario agregarlo manualmente, pero si desea utilizar Baseline, utilice -profile:v baseline
.
O convierta todos los videos en un conjunto de atributos de comentarios independientemente de los atributos de entrada. Ver¿Cómo concatenar vídeos en ffmpeg con diferentes atributos?