Da audio a video con ffmpeg

Da audio a video con ffmpeg

Un contenuto video è qualcosa che i social media e il sito Web utilizzano ampiamente. Anche un contenuto Video è un po’ più coinvolgente e con una reazione migliore di un semplice audio. Lavorando su una webradio, sono sempre alla ricerca di una soluzione che possa coinvolgere le persone per attirare le persone, quindi la mia idea era quella di modificare il contenuto audio per creare un contenuto video.

Ma come puoi creare un contenuto video da un contenuto audio?

ffmpeg ha una vasta collezione di funzioni, una di queste è la forma d’onda che può generare un video da un audio, il video mostra semplicemente la forma d’onda dell’audio. Va bene, ma per me questo è solo un punto di partenza

ffmpeg -i input_audio.mp3 -filter_complex \
"[0:a]showwaves=s=1280x100:colors=Red:mode=cline:rate=25:scale=sqrt[outputwave]" \
output.mp4

Sto usando qui filter_complex perché voglio una catena di filtri, e questo è solo uno dei passaggi. Spiego i parametri:

[0:a] questo significa: dallo stream 0 prendi l’audio… showwaves=s=1280×100 questo è il filtro, showwave e il formato di output 1280×100 colors=Red il colore della forma d’onda… mode=clineil tipo di forma d’onda, linea….. rate=25 … quanti fotogrammi scale=sqrt …la scala. sqrt va bene [outputwave] questo è un segnaposto… lo useremo più avanti nella catena.

Ma quello che voglio è un video, dove la forma d’onda è solo un livello di sovrapposizione su di esso. Il video di base potrebbe essere un video pre-creato che può essere utilizzato per tutti i contenuti audio. Potrebbe essere un video di presentazione, qualcosa creato in grafica, una foto statica o una semplice animazione. Supponiamo quindi che questo video esista. Ma come può questo video adattarsi alla lunghezza dell’audio, che può essere variabile?

Come può un video pre-creato adattarsi alla lunghezza audio di un file audio con una lunghezza variabile?

La mia idea è di riprodurre in loop il video pre-creato per la lunghezza dell’audio e sovrapporvi sopra la forma d’onda creata dal file audio!

E lo voglio in un singolo comando ffmpeg! E così…

ffmpeg -stream_loop -1 -i video.mp4 \
-i input_audio.mp3 -filter_complex \
"[1:a]showwaves=s=1280x100:colors=Red:mode=cline:rate=25:scale=sqrt[outputwave]; \
[0:v][outputwave] overlay=0:main_h-overlay_h:shortest=1 [out]" \
-map '[out]' -map '1:a' -c:a copy -y \
output.mp4

-stream_loop -1 -i video.mp4 Questo esegue il looping del video in ingresso, video.mp4, in modo idefinito* -i input_audio.mp3….outputwave] ne abbiamo già parlato…. [0:v][outputwave] overlay=0:main_h-overlay_h:shortest=1 [out] questo prende il video del primo video, con [0:v] e il video della forma d’onda, [outputwave] come input per il filtro di sovrapposizione, e lo mette nella posizione in basso con 0:main_h-overlay_h. La magia avviene con shortest=1 che significa: fai questa sovrapposizione per la lunghezza del più corto. *Il loop è infinitamente lungo ma la forma d’onda no! E questo significa: per la lunghezza della forma d’onda! -map ‘[out]’ -map ‘1:a’ -c:a copy -y questo mappa l’output come video e copia l’audio del file Questo è un frame del video finale:

Ti è piaciuto questo articolo? Considera una donazione!

MiroAdmin