Quiero concatenar 2 videos usando ffmpeg. Estoy usando:
ffmpeg -i output1.mp4 -scodec copy -vbsf h264_mp4toannexb i0.ts
Pero el archivo mp4 que obtengo se ve mucho peor que el archivo fuente.
Aquí está la información sobre ambos archivos
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
¿Como puedó resolver esté problema?
output1.mp4
y una salida,i0.ts
. La codificación al contenedor de salida ts utilizará elmpeg2video
codificador de forma predeterminada (al menos con su compilación), y la última vez que verifiqué la velocidad de bits predeterminada o la configuración de calidad para este codificador-b:v 200k
es demasiado baja para la mayoría de los casos.output1.mp4
, etc.) tienen los mismos formatos, velocidad de cuadro y tamaño de cuadro?Respuestas:
Considere usar el
concat
demuxer . De esta forma, puede evitar crear archivos intermedios temporales con pérdida y omitir un paso adicional de codificación.Nota: Todas las entradas deben tener los mismos tipos de flujo (mismos formatos, misma base de tiempo, etc.).
Cree un archivo de texto e incluya las rutas y los nombres de cada archivo para concatenar (o "unir"). Archivo de ejemplo
input.txt
:Ahora puedes usar el
concat
demuxer:Si no tiene esta función, entonces su ffmpeg es demasiado viejo o está usando un ffmpeg "falso" de la bifurcación libav.
Las compilaciones estáticas fáciles de usar están disponibles para Linux, OS X y Windows a través de la página de descarga de FFmpeg , o puede seguir una guía paso a paso para compilar ffmpeg .
Ver también:
fuente
El 1-liner más rápido sería:
fuente
ffmpeg -safe 0 -f concat -i <(find . -type f -name '*' -printf "file '$PWD/%p'\n" | sort) -c copy output.mkv
(mkv acepta más códecs que mp4, pero también puedes probarlo con mp4). El-safe 0
es para las versiones recientes de FFmpeg se quejan de nombre de archivo inseguro , y el-type f
es solo para la lista de archivos. Agregué| sort
para ordenar los archivos alfabéticamente; porque losfind
lee en orden como guardados en el sistema de archivos. Funciona también para archivos con espacios en blanco.