Technology Experience
Software

Montaggio video con ffmpeg

Nei mesi scorsi, quando ero in ballo con il progetto DevInPills, mi è capitato di dover montare tre video, concatenandoli uno all’altro, sostanzialmente per ottenere una cosa tipo:

SIGLA DI APERTURA + EPISODIO DEL GIORNO + SIGLA DI CHIUSURA

Ho evitato di cercare un software tradizionale, ma ho preferito puntare su uno strumento che fosse automatizzabile. Leggesi, quindi, da eseguire anche dal prompt dei comandi.

Ho puntato quindi sull’utility ffmpeg che, come dichiara il sito ufficiale, è un “complete, cross-platform solution to record, convert and stream audio and video”. Dalla linea di comandi potete insomma eseguire tantissime operazioni, e come potete immaginare io ne ho imparato una minima parte, quelle che avevo bisogno per finire ciò che mi serviva.

Beh, allora, come si fa?
Supponiamo di avere un folder così composto:

image

  • ffmpeg.exe : è portable, non va installato, basta posizionare l’exe da quasi 40Mb dove vi serve. Comodo.
  • In.mp4 : video di apertura del video finale
  • Out.mp4 : video di chiusura del video finale
  • Produce.ps1 : script Powershell che effettua il montaggio del video

Quello che manca nella cartella qui sopra è “Episode.mp4”, supponiamo che ci sia, e pensiamo ad esso come se fosse la nostra puntata.

Cosa contiene lo script Powershell? E’ semplice!

$InputFile = "Episode.mp4"

#--------------------------------------
#Please don't touch these values
#--------------------------------------
$ExePath = ".ffmpeg.exe"
$OpeningFile = "In.mp4"
$EndingFile = "Out.mp4"
$FinalFile = "FINAL_" + $InputFile
#--------------------------------------

# Concatenate "In.mp4" + $InputFile + "Out.mp4"
# Save the result in $FinalFile
& $ExePath -i $OpeningFile -i $InputFile -i $EndingFile -filter_complex '[0:v:0] [0:a:0] [1:v:0] [1:a:0] [2:v:0] [2:a:0] concat=n=3:v=1:a=1 [v] [a]' -map "[v]" -map "[a]" $FinalFile

Ci sono un po’ di variabile definite nello script.

  • $InputFile : è il nome del file che contiene il nostro episodio
  • $ExePath : path dove recuperare ffmpeg.exe
  • $OpeningFile : video di apertura
  • $EndingFile : video di chiusura
  • $FinalFile : nome del file video finale che verrà generato (uso come prefisso “FINAL_” rispetto al nome del file contenuto in $InputFile)

L’ultima linea esegue ffmpeg e procede al concatenamento dei tre video, che come si vede dal commento è un banale “In.mp4” + “Episode.mp4” + “Out.mp4”. La sintassi è alquanto criptica, devo dire. Ovviamente ho cercato la soluzione e poi l’ho adattata ai miei scopi.

Secondo me, se gestite un sito di video (su Facebook, YouTube, etc.) o magari una community che intende pubblicare frequentemente dei video, è uno script più che utile, perchè vi permette di registrare la vostra puntata sotto forma di Episode.mp4, copiare il file nella cartella giusta, lanciare lo script ed in pochi minuti ottenete il video montato, con la sigla di apertura & chiusura.

ffmpeg fa tantissime altre cose (cambio di risoluzioni o di aspect-ratio di un video, cambiamento del bitrate per diminuire la qualità ed ottenere un file più compatto), etc. Googlate e carpite la sintassi che serve ai vostri scopi.

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.