Concat due file mp4 con ffmpeg senza perdere la qualità

Voglio concatenare 2 video utilizzando ffmpeg. Sto usando:

ffmpeg -i output1.mp4 -scodec copy -vbsf h264_mp4toannexb i0.ts 

Ma il file mp4 che ottengo sembra molto peggio del file di origine.

Ecco le informazioni su entrambi i file

  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 

Come posso risolvere questo problema?

Considerate l'utilizzo del demuxer concatenato . In questo modo è ansible evitare di creare file temporanei temporanei e perdere un passo avanti di codifica.

Nota: tutti gli ingressi devono avere gli stessi tipi di stream (stessi formati, la stessa base temporale, ecc.).

  1. Creare un file di text e includere i routes ei nomi di ciascun file per concatenare (o "unirsi"). File di esempio, input.txt :

     file '/home/jenia/input1.mp4' file '/home/jenia/input2.mp4' file '/home/jenia/input3.mp4' 
  2. Ora puoi utilizzare il demuxer concatenato:

     ffmpeg -f concat -i input.txt -codec copy output.mp4 

Se non hai questa funzionalità, allora il tuo ffmpeg è troppo vecchio o stai usando un ffmpeg "falso" dalla fork libav.

Le versioni statiche di facile utilizzo sono disponibili per Linux, OS X e Windows tramite la pagina di download di FFmpeg oppure è ansible seguire una guida passo-passo per compilare ffmpeg .

Vedi anche:

  • Come concatenare i file multimediali (unire, unire)
  • Chi può dirmi la differenza e la relazione tra ffmpeg, libav e avconv?

Il più veloce 1-liner sarebbe:

 ls Movie\ Part\ * | while read line; do echo file \'$line\'; done | ffmpeg -f concat -i - -c copy output.mp4