web-dev-qa-db-fra.com

Concatez deux fichiers mp4 avec ffmpeg sans perte de qualité

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?

16
jenia

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.).

  1. 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'
    
  2. 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:

35
llogan

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
7
Hackeron