Come tagliare e unire un video in MP4 usando solo ffmpeg da riga di comando

Pubblicato da Nicola Rainiero il 21-04-2015 (aggiornato il 02-05-2015)

Quante volte si vorrebbe ridurre un video togliendo tutte quelle parti di cui non abbiamo bisogno? Ci sono moltissimi programmi di video editing che risolvono questo problema, anche open source, ma generalmente richiedono di processare il flusso video e audio e quindi molte risorse hardware o di scendere a compromessi sulla qualità finale. FFmpeg da riga di comando può tagliare e unire i video in quattro passi copiando il flusso multimediale anche se si tratta di filmati in MP4 codificati in h.264 e AAC.

Su Internet ogni giorno vengono pubblicati moltissimi contenuti video tra i quali: podcast, tutorial, lezioni, ecc. Spesso ne salviamo più di qualcuno e in alcune occasioni ne vorremmo poterne conservare solo alcune parti interessanti.

Ci sono moltissimi software che ci aiutano in questo, sia per scaricare i video da Internet (se il sito stesso o l'add-on del nostro browser non lo permettono), come 4K Video Downloader sia per editarli come i software open source Avidemux1VirtualDub.

È pur vero che gli attuali computer sono sufficientemente equipaggiati per processare il flusso video e lo spazio nel disco fisso non manca, ma credo che in alcuni casi sia un esercizio inutile: FFmpeg2 è più che sufficiente!

Come tagliare e unire un video in MP4 usando solo ffmpeg da riga di comando

Ecco come ripulire un file video dalle parti inutili:

  1. Bisogna prima di tutto trovare gli intervalli di tempo da preservare. In genere uso mplayer da riga di comando e premendo poi il tasto "o" (Cambia lo stato dell'OSD: nessuno / posizione / posizione + tempo / posizione + tempo + tempo totale). Naturalmente ognuno può utilizzare il riproduttore video preferito, ma il formato dovrà essere del tipo HH:MM:SS.S. Per esempio 01:34:50.1 significa 1 ora, 34 minuti e 50.1 secondi.
  2. Si esegue quindi FFmpeg riportando gli intervalli di tempo appena trovati. La scelta del migliore codec video e audio è complicata e varia principalmente in base alle esigenze dell'utente. Posso suggerire per esempio questo comando3:
    ffmpeg -i original.mp4 -ss 01:34:50 -to 02:22:50 -c:v libx264 -preset ultrafast -qp 0 -c:a libmp3lame -b:a 160k -ac 2 -ar 44100 newStream1.mp4
    Un altra soluzione che riduce il tempo di elaborazione e lo spazio libero nel disco fisso è la seguente4:
    ffmpeg -i original.mp4 -ss 01:34:50 -to 02:22:50 -codec:v copy -codec:a copy newStream1.mp4
    Nel secondo caso ho chiesto a FFmpeg di copiare semplicemente i due flussi multimediali senza processarli, può funzionare senza problemi con alcuni codec ma nel caso di un video codificato in h.264 e AAC5 richiede di passare al punto tre. Altrimenti si può andare direttamente al quarto.
  3. Se il video ritagliato è incostante e fuori sincrono bisogna riprocessarlo in questo modo prima di unirlo con le altre parti:
    ffmpeg -i newStream1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
  4. Tutti i pezzi si possono unire così:
    ffmpeg -i "concat:newStream1.mp4newStream2.mp4|newStream[...].mp4|newStream[n-part].mp4" -c copy finalVideo.mp4
    o se si sono riprocessati:
    ffmpeg -i "concat:intermediate1.ts|intermediate2.ts|intermediate[...].ts|intermediate[n-part].ts" -c copy -bsf:a aac_adtstoasc finalVideo.mp4

Consiglio infine di vericare sempre la qualità del video (finalVideo.mp4) con l'aiuto del proprio riproduttore preferito. Con mplayer si può riprodurre solo la parte interessata così:

mplayer -ss 00:17:30 -endpos 10 finalVideo.mp4

Dove:

  • -ss 00:17:30 serve per evidenziare il punto da dove partire;
  • -endpos 10 significa che il video verrà riprodotto per 10 secondi.
  • 1. Grazie ad un commento su google+, ho scoperto che persino Avidemux può funzionare da riga di comando, qui se ne parla.
  • 2. FFmpeg è una suite software completa per registrare, convertire e riprodurre audio e video. Si basa su libavcodec, libreria per la codifica audio/video. FFmpeg è sviluppato su Linux, ma può essere compilato ed eseguito su qualunque dei principali sistemi operativi, incluso Microsoft Windows. [Fonte: FFmeg su Wikipedia].
    Per installare FFmpeg in Ubuntu/Linux Mint da terminale basta eseguire i seguenti comandi:
    sudo add-apt-repository ppa:jon-severinsson/ffmpeg
    sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
    sudo apt-get update
    sudo apt-get install ffmpeg

    In gernere uso ppa:ffmulticonverter/stable come repository per installare anche FF Multi Converter, una semplice applicazione grafica che permette di convertire non solo i video, ma anche i file audio, le immagini e i documenti, comprendendo tanti formati di uso quotidiano. Usa ffmpeg per i file audio/video, unoconv per i documenti e ImageMagick per le immagini.

  • 3. Fonte: Encode/H.264 – FFmpeg
  • 4. Fonte: Concatenate – FFmpeg
  • 5. Un metodo veloce per trovare i codec usati nel file video da terminale potrebbe essere:
    ffmpeg -i originalVideo.mp4 2>&1 | grep Video: | awk '{print $3,$4}' | tr -d ,
    ffmpeg -i originalVideo.mp4 2>&1 | grep Audio: | awk '{print $3,$4}' | tr -d ,
    



Potrebbero interessarti anche:

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.