FFmpeg

Da Linux User Group Scandiano.

FFmpeg permette di codificare, convertire ed elaborare file video e audio. Questa pagina raccoglie diversi esempi di utilizzo.

Alcune opzioni

Questo parametro è importantissimo per conoscere i diversi formati possibili:

ffmpeg -formats

E questi due per conoscere i diversi codec (encoder e decoder):

ffmpeg -encoders
ffmpeg -decoders

Bitrate variabile

Possiamo determinare il bitrate variabile di un video con l'opzione -qscale (scritta anche -q) seguita da un valore che può andare da 1 a 31 (1 qualità maggiore, 31 qualità minore). Se vogliamo specificare un diverso bitrate per l'audio basterà scrivere -q:v e -q:a seguiti dal valore desiderato. Provare anche con il valore 0 (-qscale 0).

Bitrate costante

Per un bitrate costante si utilizza l'opzione -b:v per il video, mentre -b:a per l'audio.

Conversioni semplici

Per una conversione semplice, come riportato sulla home page del progetto, basta questo comando:

ffmpeg -i input.mp4 output.avi

In questo modo, specificando l'estensione .avi informiamo FFmpeg del file che vogliamo ottenere e al resto ci penserà il programma.

Se invece vogliamo specificare ad esempio il bitrate, il formato e il deinterlacciamento, un utile insieme di opzioni potrebbe essere questo:

ffmpeg -i input.avi -c:v libtheora -deinterlace -c:a libvorbis -b:v 1000k -f ogg output.ogv

Nel dettaglio:

  • -i input è il file da convertire
  • -c:v libtheora è la codifica video che vogliamo ottenere
  • -deinterlace serve per applicare il deinterlacciamento
  • -c:a libvorbis è la codifica audio che vogliamo ottenere
  • -b:v 1000k è il bitrate medio del video
  • -f ogg è il formato del video in uscita
  • output.ogv è il nome del file creato

Estrarre l'audio

Questo comando ci permette di estrarre l'audio usando l'opzione -vn (esclusione del video) senza convertirlo:

ffmpeg -i input.ogv -vn -acodec copy output.ogg

Se invece dobbiamo convertire l'audio basta specificare il codec audio che vogliamo ottenere:

ffmpeg -i input.ogv -vn -acodec libmp3lame input.mp3

Tagliare un video

Con questo comando tagliamo i primi 10 minuti di un video:

ffmpeg -i input.ogv -ss 00:10:00 -acodec copy -vcodec copy output.ogv

Con questo comando manteniamo la prima ora di un video, cioè eliminiamo tutto quello che c'è dopo:

 ffmpeg -i input.ogv -t 01:00:00 -acodec copy -vcodec copy output.ogv

Con questo comando tagliamo i primi 10 minuti e tagliamo quello che c'è dopo 5 minuti di durata:

ffmpeg -i input.ogv -ss 00:10:00 -t 00:05:00 -acodec copy -vcodec copy output.ogv

Conversione in formato Xvid (MPEG-4)

Trasformare i video in formato Xvid [1] molto spesso li rende utilizzabili con la maggior parte dei dispositivi di intrattenimento (Smart TV, lettori, ecc):

ffmpeg -i input.mov -q:v 3 -c:v libxvid -c:a libmp3lame output.avi

In questo esempio per la codifica video si è utilizzato un valore di bitrate variabile di 3 (i valori possibili vanno da 1, qualità più alta, a 31, qualità più bassa): si consiglia di provare magari con uno spezzone di file e considerare qualità/dimensione del file. Provare anche il valore 0 oppure un bitrate costante.

Conversione di video con più flussi (stream)

Se abbiamo un video che ha più flussi o stream (ad esempio lingue diverse e sottotitoli) possiamo convertirlo mantenendo solo quelli che ci interessano. Per vedere i flussi disponibili possiamo usare mkvinfo (questo strumento è presento all'interno di mkvtoolnix, insieme a mkvmerge e mkvextract) cercando il numero di traccia corrispondente: l'ID della traccia da usare per mkvmerge e mkvextract viene specificato e di solito è uguale a n di traccia - 1:

mkvinfo input.mkv

E questa è la stringa ffmpeg che nel nostro caso seleziona il flusso video (0:0) e il primo flusso audio (0:1):

ffmpeg -i input.mkv -map 0:0 -map 0:1 output.mkv

Sottotitoli

Per estrarre i sottotitoli da un video possiamo usare mkvinfo come scritto sopra per determinare l'ID della traccia e successivamente usare questo comando:

mkvextract tracks video.mkv 2:video.srt

Nel caso sopra viene estratta la traccia con ID 2 e salvata come file .srt. Nel caso avessimo sottotitoli nel formato SSA/ASS possiamo specificare l'estensione diversa:

mkvextract tracks video.mkv 2:video.ass

e se necessario convertirlo in .srt:

ffmpeg -i video.ass video.srt

Se vogliamo invece incorporare i sottotitoli nel video che andremo a creare possiamo usare:

ffmpeg -i video.mkv -vf subtitles=video.mkv video.avi

Se abbiamo più sottotitoli dobbiamo specificare quale ci interessa incorporare con l'opzione -map, ad esempio con -map0:2 (la prima opzione è riferita all'output stream 0 e la seconda all'output stream 2). Si rimanda alla guida ufficiale per i vari utilizzi di -map: [2].

Nell'esempio sopra convertiamo il video in formato .avi. Se i sottotitoli fossero in un file .srt possiamo usare:

ffmpeg -i video.mkv -vf subtitles=subtitle.srt video.avi

Altrimenti in formato SSA/ASS usiamo:

ffmpeg -i video.mkv -vf "ass=subtitle.ass" video.avi

Note

  1. Esempi utili sul Wiki di FFmpeg [1]