Ci sono molti strumenti open source là fuori per l’editing, la modifica e la conversione di file multimediali esattamente in quello che ti serve. Strumenti come Audacity o Handbrake sono fantastici, ma a volte vuoi solo cambiare un file da un formato ad un altro velocemente. Inserisci FFmpeg.
FFmpeg è una raccolta di diversi progetti per gestire i file multimediali. È spesso usato dietro le quinte in molti altri progetti relativi ai media. Nonostante il suo nome, non ha nulla a che fare con il Moving Picture Experts Group o la miriade di formati multimediali che ha creato.
In questo articolo userò FFmpeg attraverso lo strumento a riga di comando ffmpeg, che è solo un singolo, piccolo pezzo del progetto FFmpeg. È disponibile su molti sistemi operativi diversi ed è incluso di default in alcuni sistemi operativi. Può essere scaricato dal sito web di FFmpeg o attraverso la maggior parte dei gestori di pacchetti.
FFmpeg è un potente strumento che può fare quasi tutto ciò che puoi immaginare con i file multimediali. In questo articolo, siamo interessati ad usarlo per convertire i file, quindi non faremo un’immersione profonda nel suo intero set di funzioni. Prima di guardare all’uso di FFmpeg, dobbiamo prima dare una rapida occhiata a cosa sia esattamente un file multimediale.
File multimediali
A un livello molto alto, un file multimediale è suddiviso in un contenitore e nei suoi flussi. I flussi includono i componenti AV effettivi, come l’audio o il video di un film, e sono codificati utilizzando una particolare codifica multimediale, o codec. Ogni codec ha le sue proprietà, punti di forza e debolezze. Per esempio, il codec FLAC è buono per l’audio lossless di alta qualità, mentre Vorbis è progettato per competere con l’MP3 in termini di dimensioni dei file mentre offre una migliore qualità audio. Questo significa che un file formato FLAC sarà molto più grande di un flusso audio Vorbis ma dovrebbe suonare meglio. Nessuno dei due è intrinsecamente migliore dell’altro, poiché ognuno sta cercando di fare cose diverse.
Il contenitore è il wrapper per i flussi. Presenta un’unica interfaccia con cui i lettori e gli strumenti multimediali possono interagire. Alcuni contenitori sono molto avanzati e permettono qualsiasi tipo di flusso, compresi più flussi video e audio all’interno di un singolo contenitore. I flussi in un contenitore non devono essere solo audio o video. Diversi contenitori permetteranno flussi diversi, ad esempio, sottotitoli, informazioni sui capitoli o altri metadati. Tutto dipende da ciò che il contenitore è impostato per permettere.
Questa è una rappresentazione astratta dei file multimediali e salta molte delle differenze tra i contenitori. Molti richiedono certi flussi e metadati o pongono restrizioni sui codec o sui contenuti permessi. Questa spiegazione è sufficiente per farvi passare questo articolo. Per saperne di più, clicca sui link qui sopra.
Siate consapevoli che la codifica video e audio può richiedere molto tempo per essere eseguita. Dovresti essere preparato a sistemarti per un po’ quando usi FFmpeg.
Conversione di base
La cosa che fa inciampare la maggior parte delle persone quando si tratta di convertire audio e video è selezionare i corretti formati e contenitori. Fortunatamente, FFmpeg è abbastanza intelligente con le sue impostazioni predefinite. Di solito seleziona automaticamente i codec e i contenitori corretti senza alcuna configurazione complessa.
Per esempio, diciamo che hai un file MP3 e vuoi convertirlo in un file OGG:
ffmpeg -i input.mp3 output.ogg
Questo comando prende un file MP3 chiamato input.mp3 e lo converte in un file OGG chiamato output.ogg. Dal punto di vista di FFmpeg, questo significa convertire il flusso audio MP3 in un flusso audio Vorbis e avvolgere questo flusso in un contenitore OGG. Non hai dovuto specificare i tipi di flusso o contenitore, perché FFmpeg lo ha capito per te.
Questo funziona anche con i video:
ffmpeg -i input.mp4 output.webm
Perché WebM è un formato ben definito, FFmpeg sa automaticamente quali video e audio può supportare e convertirà i flussi per essere un file WebM valido.
In base al contenitore da te scelto, questo non sempre funzionerà. Per esempio, contenitori come Matroska sono progettati per gestire quasi tutti i flussi che vuoi metterci dentro, che siano validi o meno. Questo significa che il comando:
ffmpeg -i input.mp4 output.mkv
può risultare in un file con gli stessi codec che aveva input.mp4, che può essere o meno quello che vuoi.
Selezionare i tuoi codec
Quindi cosa fai quando vuoi usare un contenitore come Matroska (che può gestire quasi ogni flusso) ma ancora influenzare quali codec sono in uscita? FFmpeg in soccorso! Puoi selezionare i codec necessari usando la bandiera -c.
Questa bandiera ti permette di impostare il diverso codec da usare per ogni flusso. Per esempio, per impostare il flusso audio su Vorbis, dovresti usare il seguente comando:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
Lo stesso può essere fatto per cambiare sia il video che il flusso audio:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
Questo farà un contenitore Matroska con un flusso video VP9 e un flusso audio Vorbis, essenzialmente lo stesso del WebM che abbiamo fatto prima.
Il comando ffmpeg -codecs stamperà ogni codec che FFmpeg conosce. L’output di questo comando cambierà a seconda della versione di FFmpeg che hai installato.
Cambiare un singolo flusso
Più spesso di quanto vorresti, il file che hai è parzialmente corretto con solo un singolo flusso nel formato sbagliato. Può essere molto dispendioso in termini di tempo ricodificare il flusso corretto. FFmpeg può aiutare in questa situazione:
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
Questo comando copia il flusso video da input.webm in output.mkv e codifica il flusso audio Vorbis in un FLAC. Il flag -c è davvero potente.
Cambiare un contenitore
L’esempio precedente può essere applicato a entrambi i flussi audio e video, permettendoti di convertire da un formato contenitore a un altro senza dover fare alcuna codifica aggiuntiva del flusso:
ffmpeg -i input.webm -c:av copy output.mkv
Influenzare la qualità
Ora che abbiamo una gestione dei codec, la prossima domanda è: come impostiamo la qualità di ogni flusso?
Il metodo più semplice è cambiare il bitrate, che può risultare o meno in una qualità diversa. La capacità degli esseri umani di vedere e sentire non è così netta e pulita come ci piacerebbe pensare. A volte cambiare il bitrate fa un’enorme differenza nella qualità soggettiva. Altre volte potrebbe non fare altro che cambiare la dimensione del file. A volte è molto difficile dire cosa succederà senza provarlo.
Per impostare il bitrate di ogni flusso, si usa il flag -b, che funziona in modo simile al flag -c, tranne che al posto delle opzioni codec si imposta un bitrate.
Per esempio, per cambiare il bitrate del video, si usa così:
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
Questo copia l’audio (-c:a copy) da input.webm e convertirà il video in un codec VP9 (-c:v vp9) con un bit rate di 1M/s (-b:v), il tutto racchiuso in un contenitore Matroska (output.mkv).
Un altro modo in cui possiamo influire sulla qualità è regolare il frame rate del video usando l’opzione -r:
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
Questo crea un nuovo Matroska con il flusso audio copiato e il frame rate del flusso video forzato a 30 fotogrammi al secondo, invece di usare il frame rate dell’input (-r 30).
Puoi anche regolare le dimensioni del tuo video usando FFmpeg. Il modo più semplice è usare una dimensione video predeterminata:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
Questo modifica il video a 1280×720 nell’output, ma puoi impostare la larghezza e l’altezza manualmente se vuoi:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
Questo produce esattamente lo stesso output del comando precedente. Se vuoi impostare dimensioni personalizzate in FFmpeg, ricorda che il parametro larghezza (1280) viene prima dell’altezza (720).
La regolazione del frame rate e del bitrate sono due tecniche rozze ma efficaci per influenzare la qualità dei media. Impostare questi valori molto alti non può migliorare la qualità di una sorgente esistente se la sua qualità è già bassa.
Modificare queste impostazioni è più efficace per ridurre rapidamente un flusso di alta qualità per fare un file di dimensioni inferiori. Regolare le dimensioni del tuo video non può migliorare la qualità, ma può renderlo più adatto a un tablet invece che alla tua TV. Cambiare le dimensioni di un video da 640×480 a 4K non lo migliorerà.
Cambiare la qualità dei vostri file è una questione molto soggettiva, il che significa che non c’è un modo che funzioni sempre. Il metodo migliore è quello di fare qualche cambiamento e testare se vi sembra migliore.
Modificare i flussi
Spesso avete un file che è quasi perfetto, e avete solo bisogno di tagliare alcune parti. Questo può essere fatto più facilmente con uno strumento che ti mostra cosa stai cambiando, ma se sai esattamente dove vuoi tagliare, è molto facile farlo in FFmpeg:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
Questo copierà i flussi video e audio (-c:av copy) ma taglierà il video. L’opzione -t imposta la durata del taglio a 10 secondi e l’opzione -ss imposta il punto di inizio del video per il taglio, in questo caso a un minuto (00:01:00). Puoi essere più preciso di ore, minuti e secondi, scendendo fino ai millisecondi se necessario.
Estrarre l’audio
A volte non ti interessa molto il video, vuoi solo l’audio. Fortunatamente questo è molto semplice in FFmpeg con il flag -vn:
ffmpeg -i input.mkv -vn audio_only.ogg
Questo comando estrae solo l’audio dall’input, lo codifica come Vorbis, e lo salva in audio_only.ogg. Ora hai un flusso audio isolato. Puoi anche usare i flag -an e -sn allo stesso modo per eliminare i flussi di audio e sottotitoli.
Fare una GIF
Di recente, le GIF animate (con la g dura perché non sono un mostro) sono tornate in auge. Personalmente penso che GIF sia il peggior formato che si possa scegliere per un video. Ha una qualità di compressione e dimensioni terribili; ha limiti molto duri intorno ai colori, al frame rate e ai metadati del contenitore; e non può supportare l’audio. Eppure, è abbastanza popolare. Quindi, come puoi trasformare un videoclip in una GIF animata?
Utilizzare il flag -an, simile a quello che abbiamo fatto sopra, è meglio che creare una GIF animata se vuoi fare un video senza audio, ma ci sono molti posti che supportano le GIF che non supportano un formato video diverso. Per tutti quelli:
ffmpeg -i input.mkv output.gif
Questo comando crea una GIF delle stesse dimensioni del file di input. Questa è spesso una cattiva idea, poiché le GIF non comprimono bene rispetto ad altri formati video (nella mia esperienza una GIF sarà circa otto volte più grande del video sorgente). Può essere utile usare l’opzione -s per ridimensionare la GIF a qualcosa di un po’ più piccolo, specialmente se la sorgente di input è abbastanza grande, come un video HD.
Altri strumenti
Mentre FFmpeg è lo strumento ideale per la maggior parte dei compiti AV, non è perfetto per tutto. Ci sono alcuni strumenti che, usati insieme a FFmpeg, possono rendere tutto un po’ più facile.
Riprendere video da YouTube
Può essere molto facile caricare qualcosa su YouTube, perdere il video originale, e avere solo la versione di YouTube. Qual è il modo più semplice per recuperare una copia dei tuoi video da YouTube?
Youtube-dl è un piccolo strumento elegante che puoi usare per prendere i video da YouTube e da molti altri servizi di video-streaming. È super semplice da usare:
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
Questo comando scarica il video all’URL indicato e lo salva in locale.
Youtube-dl ha diverse opzioni per controllare la qualità e il formato del video scaricato, ma io trovo più facile usare il comando qui sopra. Scarica la massima qualità audio e video in un singolo file, poi uso FFmpeg per convertirli nel formato che voglio.
Per ottenere informazioni sui media
A volte tutto quello che devi sapere è cosa c’è dentro il contenitore dei media. Mentre ci sono diversi strumenti che possono farlo, il mio preferito è MediaInfo. MediaInfo mostra tutte le informazioni all’interno di un contenitore multimediale, per ciascuno dei diversi flussi, così come i metadati per il file di input. Questo ti dà tutto quello che vorresti sapere – e probabilmente un mucchio di cose che non sapevi.
Eseguendo il comando mediainfo inputFile.mkv si ottiene una lista di informazioni sul file di input in una forma leggibile dall’uomo.
E altro…
Questo è solo un grattare la superficie di quello che FFmpeg può fare. Fortunatamente la documentazione per FFmpeg e gli altri strumenti del progetto è molto buona e vale la pena di controllarla. Ti insegnerà tutti i diversi trucchi che questo cane può fare.
Se stai cercando uno strumento con un’interfaccia grafica per convertire multimedia, Handbrake è uno strumento eccezionalmente buono disponibile su Linux, Mac OS X e Windows. Handbrake usa FFmpeg (tra gli altri strumenti) sotto il cofano.