; ffmpeg - utilizzo di filter_complex





"Giornalismo è diffondere ciò che qualcuno non vuole che si sappia. Il resto è propaganda."
Horacio Verbitzky

Blog di Giovanni Chifelio

La proprietà letteraria degli scritti riportati in questo sito è di Claudio Chicco, Via Roma, 30 PAESANA (CN), il quale ne permette la la citazione di brani, citando fonte ed autore e NON ne permette il SUNTO, se non in una versione concordata con l'autore. Per questo fine usare l'apposito form " contatti". Gli articoli pubblicati nel sito possono essere non attendibili. Non mi assumo alcuna responsabilità per contenuto degli articoli di altri autori. La responsabilità dei testi e del loro contenuto è unicamente dei rispettivi autori. Eventuali commenti postati sono a responsabilità di chi li ha postati.
Questo sito NON viene aggiornato con regolarità periodica, per cui NON può essere considerato una testata giornalistica di informazione. Quello che viene espresso dall'autore è libera opinione dello stesso autore, garantita come diritto dall'Art.21 della Costituzione Italiana.

I miei libri:
Il coraggio di cambiare idea: inganni e falsità nella cultura occidentale https://www.amazon.it/dp/B0GY5JTZ2L

Il cinghiale: Pian Marmarin https://www.amazon.it/dp/B0H7MK9QNZ

Un uomo in fuga: Il Ritorno https://www.amazon.it/dp/B0HBXRXYZV

Di prossima pubblicazione su amazon:
Manuale pratico del panificatore pasticcere: Ricette e preparazione di pane, grissini, pasticceria da forno e pasticceria fresca.

Sono ancora disponibili alcune copie della prima stampa 2021 Contattami per informazioni, oppure contattarmi sulla mia pagina Telegram.
Oppure attendi la prossima pubblicazione su amazon kdp.

ffmpeg: filter_complex
Venerdì 13 dicembre 2024

I


comandi e gli scripts fino a qui presentati nei vari articoli su questo tema eseguivano una sola operazione alla volta, il che non è sbagliato, ma, a parte il lungo tempo necessario all'elaborazione delle molteplici operazioni una dopo l'altra, la qualità del video finale ne risente sia nel video che nell'audio. Il comando ffmpeg mette a disposizione l'opzione filter_complex che permette di eseguire contemporaneamente diversissime operazioni, con notevole risparmio di tempo, ma altresì con un notevole aumento della qualità audio e video del risultato finale. In altre parole, è possibile, con un solo comando filter_complex, aggiungere l'overlay del logo, i sottotitoli, l'overlay di uno o più video sopra una base composta da un altro video, aggiungere commenti sonori, fare dei ritagli di un video, etc.
    In base a quanto spiegato sul sito ffmpeg.org, questo viene reso possibile separando tutte le componenti dei video e ricomponendole. Anche se da dilettanti tutto questo possa risultare un tantino astruso, ci si rende immediatamente conto, che il risultato finale è migliore di ua serie di trasformazioni una dopo l'altra, come fatto sino a questo punto.
    Per me non è stato agevole comprendere il meccanismo di tutto questo, in quanto la pagina di aiuto di filter_complex non risulta essere alla portata dell'utente, diciamo così, ai primi passi, ma solamente per chi già conosce l'argomento. È una pecca dei programmatori che, per mestiere loro, dovrebbero saper mettersi nei panni dell'utente che dovrebbe utilizzare il software, mentre in realtà sembrano sentirsi ad un livello superiore -e di fatto lo sono- così questa loro sensazione sembra amplificarsi ancora, se riescono a fare in modo che gli altri comuni mortali non capiscono ciò che per loro, che sono specializzati in quella cosa, è semplicissimo. Comunque, alla lunga, con tanta pazienza, per prove ed errori, senza arrendermi mai, alla fine sono arrivato a capirne qualche cosa. Va detto che è molto più agevole comprendere la pagina wiki dove si parla di filter in generale.

Script bash che aggiunge, con filter_complex
quanto spiegato di seguito

    Presento in questo articolo un solo script bash, che provvede a:

  1. mixare l'audio del video di base con l'audio di quello sovrapposto (amix)
  2. aggiungere un commento musicale al risultato ottenuto precedentemente (amix)
  3. ridurre un video per poterlo sovrapporre ad un altro di base (scale)
  4. sovrapporre un video più piccolo su un altro (overlay)
  5. ridurre la cornice in proporzione a quanto è stato ridotto il video di cui al punto 3.(scale)
  6. sovrapporre la cornice scalata affinché il video piccolo risulti all'interno di essa (overlay)
  7. sovrapporre il logo al tutto (overlay)
  8. aggiungere i sottotitoli impostati in un file.ass
  9. infine aggiungere l'audio ottenuto ai punti 1.,2. al video finale

    In realtà, non sono arrivato immediatamente a questo complicatissimo filter_complex, ma ci sono arrivato per gradi. In una primissima versione, aggiungevo semplicemente il video in sovrimpressione ad un video di base, il logo ed i sottotitoli. Inizialmente non riuscivo a concepire come inserire in questo filtro anche le composizioni dell'audio. Diciamo che a forza di insistere e riprovare (io non mi arrendo mai!), alla fine ho avuto una specie di illuminazione, spronato dai piccoli successi precedenti. Nel primo caso, come quello di una cornice semplice, ossia che non eccede lo spazio del video, mettevo prima la cornice, poi riducevo il tutto e procedevo alla sovrapposizione. Creando poi una cornice più complessa, come quella del video della discesa da Agliasco, con decorazioni che eccedono il limite del video piccolo, occorreva un punto di sovrapposizione negativo rispetto al video piccolo, per cui ho solo invertito le operazioni, come nei punti elencati sopra.

In questo video Vi racconto il succo dell'articolo
facendoVi vedere un'altra discesa in bicicletta.

    Di complicato, rispetto alla prima versione, ma non poi tanto, era che occorreva calcolare il puno di partenza di questa cornice anomala, calcolo del quale si occupa il programma bash.
     Quello che è necessario capire è che ogni comando, separato da punto e virgola, prevede degli input output che nel comando sono racchiusi tra [parentesi quadre]. I primi input del comando ffmpeg sono quelli che seguono -i :

$ffmpeg -i base.mkv -i videodasovrapporre.mp4 -i cornicerossa.png 

    Così di seguito: il primo input corrisponde a [0], il secondo a [1], il terzo a [2], etc.
    Per quanto riguarda gli output vanno bene nomi di fantasia che si riconoscano:

[2video:a]... [soundtot:a]... [scaled]

    tenendo presente che, a loro volta gli output possono essere utilizzati come input per una operazione successiva. Una piccola precisazione riguardo agli output riportati sopra tratti dal codice bash dell'esempio: [2video:a] il ":a" si riferisce ad un audio, mentre se la modifica riguarda solamente il video, si potrebbe inserire ":v".
    Si analizzi a quasto proposito, tenendo presenti queste semplici regole, il comando ffmpeg con tutto quanto segue nello script bash presentato più sopra. Spero che tutto questo Vi sia stato utile.

    Precedenti articoli su ffmpeg:
    ffmpeg6.php Mosaico di video.
    ffmpeg5.php Sottotitoli colorati con file.ass
    ffmpeg4.php Taglio, velocità, ritaglio (crop), adattamento video verticale con programmi bash.
    ffmpeg3.php Primo programma bash per concatenamento video, aggiunta audio e sottotitoli.
    ffmpeg.php Primo approccio al comando ffmpeg

Vi saluto e vi abbraccio tutte e tutti
Se l'articolo Vi è piaciuto e Vi è stato utile, mettete dei commenti, qui sotto e sotto il video, e divulgate.
Vi ringrazio.
Claudio Chicco

Articolo n.208: ffmpeg_fcomplex.php
Sito: chifelio
Tema: 27 - Tecniche di programmazione informatica
Data: 2024-12-13

_______________________________

Commenta questo articolo.


       Dopo aver premuto "INVIO", verrai reindirizzato ad una pagina nella quale devi postare le lettere delle immagini che appaiono, per dimostrare di non essere un robot.
       Se tutto va a buon fine, verrai nuovamente reindirizzato alla pagina che hai commentato, con in fondo, dopo questo "form", il tuo nuovo commento.

<--Inserisci Commento

Scegli Nome utente (Obbligatorio *)

Cognome
(Se vuoi apparire te stesso!)

Indirizzo email (Obbligatorio * - Tranquillo! NON verrà pubblicato, ne' venduto a scopi commerciali pubblicitari.
La mail la devi mettere in ogni altro blog! Questo sito NON UTILIZZA cookie)

       Tengo molto ad avere commenti e riscontri, anche, soprattutto, da chi non concorda con quanto scrivo.
   Il fatto di dover inserire la mail non ti spaventi: NON SARAI PERSEGUITATO DA NESSUNA "MAILING LIST", ne' tantomeno, la tua mail sarà venduta a scopo commerciale ne' pubblicata.
       Ricordo brevemente le regole base di qualsiasi blog:
       Niente insulti e volgarità (verranno cancellati commenti di questo tipo!).