AVCONV: join mp4 video

la guida contiene alcuni errori:
https://trac.ffmpeg.org/wiki/How%20to%20concatenate%20%28join,%20merge%29%20media%20files

il modo per concatenare più video mp4 (tutti con la stessa codifica) è quello di cambiare il loro “contenitore” in MPEGts (MPEG transport stream) SENZA TRANSCODIFICARE IL FLUSSO !

ottenuti i video MPEGts si possono concatenare con il protocollo “concat” di avconv: qui nasce un problema sul flusso AUDIO se si specifica il bitstream filter aac_adtstoasc che secondo la documentazione sarebbe necessario. invece, se lo si omette, l’ errore non si presenta, ma dopo la concatenazione si ottiene un file con un contenitore diverso da quelli di origine.

vediamo i passaggi:

# conversione del video:
avconv -i R1.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
avconv -i R2.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts

avconv -i "concat:intermediate1.ts|intermediate2.ts" -an -vcodec copy video.mp4

#conversione dell' audio:
avconv -i R1.mp4 -vn -acodec copy -f mpegts audio1.ts
avconv -i R2.mp4 -vn -acodec copy -f mpegts audio2.ts

avconv -i "concat:audio1.ts|audio2.ts" -vn -acodec copy audio.m4a

# riunire i flussi audio e video (mux audio/video):
avconv -i video.mp4 -i audio.m4a -c copy -map 0:v -map 1:a output.mp4

per trattare contemporaneamente audio e video:

avconv -i R1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
avconv -i R2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
avconv -i "concat:intermediate1.ts|intermediate2.ts" -c copy video.mp4

come si vede dai parametri di avconv, il flusso non viene ricodificato, ma COPIATO.

C’è però il cambio di container, come detto sopra.
Lo si può vedere con avprobe:

$ avprobe R1.mp4 
avprobe version 11-6:11-2, Copyright (c) 2007-2014 the Libav developers
  built on Oct 19 2014 21:50:10 with gcc 4.9.1 (Debian 4.9.1-15)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'R1.mp4':
  Metadata:
    major_brand     : MSNV
    minor_version   : 512
    compatible_brands: MSNV
    creation_time   : 2014-07-02 11:05:12
  Duration: 00:12:30.00, start: 0.000000, bitrate: 2715 kb/s
    Stream #0.0(eng): Video: h264 (Main), yuv420p, 848x480 [PAR 1:1 DAR 53:30], 2585 kb/s, 25 fps, 25k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2014-07-02 11:05:12
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      creation_time   : 2014-07-02 11:05:12
# avprobe output
$ avprobe output.mp4 
avprobe version 11-6:11-2, Copyright (c) 2007-2014 the Libav developers
  built on Oct 19 2014 21:50:10 with gcc 4.9.1 (Debian 4.9.1-15)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.1.0
  Duration: 00:24:35.96, start: 0.000000, bitrate: 2678 kb/s
    Stream #0.0(und): Video: h264 (Main), yuv420p, 848x480 [PAR 1:1 DAR 53:30], 2546 kb/s, 25 fps, 90k tbn, 50 tbc (default)
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s (default)
# avprobe output

La stessa cosa si può fare senza passare per i file intermedi: bisogna soltanto creare tante FIFO (named pipe) quanti sono i file mp4 da unire.
Il “trucco” consiste nel mettere le FIFO in attesa dei dati da parte del comando avconv che genera i MPEGts.
Poi si lancia il comando avconv che esegue la concatenazione:

mkfifo temp1 temp2
avconv -i R1.mp4 -c copy -f mpegts -bsf h264_mp4toannexb -y temp1 &
avconv -i R2.mp4 -c copy -f mpegts -bsf h264_mp4toannexb -y temp2 &
avconv -f mpegts -i "concat:temp1|temp2" -c copy output.mp4
rm temp1 temp2

Un pensiero su “AVCONV: join mp4 video”

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...