He estado tratando de fusionar algunos archivos mp4 con diferentes velocidades de cuadro sin éxito. Cuando combino los archivos, siempre parece haber un problema con la salida. La mayoría de las veces el audio no está sincronizado con el video. Intenté modificar la velocidad de fotogramas de los videos (30 a 60 o 60 a 30), pero reduce demasiado la calidad.
Para fusionar los archivos, he estado usando todas las soluciones en esta publicación .
al probar este método:
:: Create File List
echo file file1.mp4 > mylist.txt
echo file file2.mp4 >> mylist.txt
echo file file3.mp4 >> mylist.txt
:: Concatenate Files
ffmpeg -f concat -i mylist.txt -c copy output.mp4
El audio y el video ya no están sincronizados y el video a veces se congela.
Al probar "mp4 a mpg y luego fusionar":
ffmpeg -i 1.mp4 -qscale 0 1.mpg
ffmpeg -i 2.mp4 -qscale 0 2.mpg
cat 1.mpg 2.mpg | ffmpeg -f mpeg -i - -qscale 0 -vcodec mpeg4 output.mp4
Pierdo el audio en los archivos de 60 FPS, en este punto pensé que era un problema de audio, así que traté de "unificar" el códec de audio de todos los archivos mp4 de esta manera:
ffmpeg -i input.mp4 -acodec SOME_AUDIO_TYPE -vcodec copy out.mp4
la combinación se produce sin ningún error, pero el audio aún no está sincronizado
Entonces, en mi último intento, intenté cambiar la tasa de fps de mis archivos de esta manera:
ffmpeg -y -i source.mp4 -r FPS -s RESOLUTION -c:v libx264 -b:v 3M -strict -2 -movflags faststart destination.mp4
Pero el resultado reduce demasiado la calidad.
Existe el ffprobe de los dos archivos:
libavutil 55. 57.100 / 55. 57.100
libavcodec 57. 88.100 / 57. 88.100
libavformat 57. 70.100 / 57. 70.100
libavdevice 57. 5.100 / 57. 5.100
libavfilter 6. 81.100 / 6. 81.100
libswscale 4. 5.100 / 4. 5.100
libswresample 2. 6.100 / 2. 6.100
libpostproc 54. 4.100 / 54. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.63.100
Duration: 00:00:32.00, start: 0.000000, bitrate: 3120 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709/bt709/iec61966-2-1), 1280x720, 2981 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
libavutil 55. 57.100 / 55. 57.100
libavcodec 57. 88.100 / 57. 88.100
libavformat 57. 70.100 / 57. 70.100
libavdevice 57. 5.100 / 57. 5.100
libavfilter 6. 81.100 / 6. 81.100
libswscale 4. 5.100 / 4. 5.100
libswresample 2. 6.100 / 2. 6.100
libpostproc 54. 4.100 / 54. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.63.100
Duration: 00:00:23.01, start: 0.000000, bitrate: 2585 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720, 2412 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 159 kb/s (default)
Metadata:
handler_name : SoundHandler
Al fusionar los 2 archivos con el primer método, esto es lo que obtengo:
[mp4 @ 0xbc5a340] Non-monotonous DTS in output stream 0:0; previous: 2872466, current: 843279; changing to 2872467. This may result in incorrect timestamps in the output file.
[mp4 @ 0xbc5a340] Non-monotonous DTS in output stream 0:0; previous: 2872467, current: 843535; changing to 2872468. This may result in incorrect timestamps in the output file.
[mp4 @ 0xbc5a340] Non-monotonous DTS in output stream 0:0; previous: 2872468, current: 843791; changing to 2872469. This may result in incorrect timestamps in the output file.
[mp4 @ 0xbc5a340] Non-monotonous DTS in output stream 0:0; previous: 2872469, current: 844047; changing to 2872470. This may result in incorrect timestamps in the output file.
frame= 2340 fps=0.0 q=-1.0 Lsize= 19428kB time=00:00:50.53 bitrate=3149.8kbits/s speed=58.7x
video:18420kB audio:949kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.304418%
¿Hay alguna solución a este problema?
El audio tendrá que volver a codificarse con la misma frecuencia de muestreo, si es diferente en los archivos. No es necesario volver a codificar el video, pero debe tener la misma escala de tiempo.
ffmpeg -i input.mp4 -c:a aac -ar 48000 -ac 2 -c:v copy -video_track_timescale 600 out.mp4
Si el audio de un archivo ya es AAC-LC estéreo de 48 kHz, puede omitir la codificación de audio y simplemente usar-c:a copy
Ejecute el concat con los archivos procesados.
Main
el perfil para videos. La sonda pastebin muestra Alto. ¿Recodificaste los videos?ffmpeg -i 1.mp4 -c:v copy output.mp4
(solo para verificar el archivo) la salida está dañada (la misma salida que el gyazo). ¿Supongo que es un error en los archivos? Solo los descargo de twitch.tv, que creo que es una fuente confiableEn la carpeta actual, convierta todos los archivos mp4 a TS. Luego use el comando 'copiar' de Windows para fusionar cada TS. Luego, una vez que tenga un solo ts, transmux a mp4 sin volver a codificar.
for %i in (*.mp4) do ffmpeg -i "%i" -c copy -bsf:v h264_mp4toannexb "%~ni.ts"
copy /b *.ts all.ts
ffmpeg -i all.ts -c copy all.mp4
Michael Liebmann
TyLO
llogan
ffmpeg -i file1.mp4 -i file2.mp3 -i file3.mp4