Je veux concaténer 2 vidéos en utilisant ffmpeg. J'utilise:
ffmpeg -i output1.mp4 -scodec copy -vbsf h264_mp4toannexb i0.ts
Mais le fichier mp4 que je reçois est bien pire que le fichier source.
Voici les informations sur les deux fichiers
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
Comment puis-je résoudre ce problème?
Pensez à utiliser le démodulateur concat
. De cette façon, vous pouvez éviter de créer des fichiers intermédiaires temporaires avec des pertes et ignorer une étape supplémentaire de réencodage.
Remarque: Toutes les entrées doivent avoir le même type de flux (mêmes formats, même base de temps, etc.).
Créez un fichier texte et incluez les chemins et les noms de chaque fichier à concaténer (ou "rejoindre"). Exemple de fichier, input.txt
:
file '/home/jenia/input1.mp4'
file '/home/jenia/input2.mp4'
file '/home/jenia/input3.mp4'
Maintenant, vous pouvez utiliser le démodulateur concat
:
ffmpeg -f concat -i input.txt -codec copy output.mp4
Si vous ne disposez pas de cette fonctionnalité, votre fichier ffmpeg est trop ancien ou vous utilisez un "faux" fichier ffmpeg de la branche libav.
Des versions statiques faciles à utiliser sont disponibles pour Linux, OS X et Windows via la page de téléchargement FFmpeg , ou vous pouvez suivre un guide étape par étape pour compiler ffmpeg .
Regarde aussi:
Le 1-liner le plus rapide serait:
ls Movie\ Part\ * | while read line; do echo file \'$line\'; done | ffmpeg -f concat -i - -c copy output.mp4