"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.

Manipolazione video con comandi ffmpeg
da linea di comando o con script bash Linux.
Mercoledì 10 gennaio 2024

Video precedente con audio non ottimale.
C


ontinuo con la serie di esposizione dell'uso di comandi ffmpeg per l'elaborazione dei video, in seguito alle ultime esperienze. In particolare, l'ultimo mio video che vedete a destra, formato da una serie infinita di frammenti, rimaneggiati in eccesso in seguito ad una serie di "prove ed errori", video venuto malissimo a causa di questa eccessiva manipolazione, mi ha comunque fatto fare una grande esperienza che mi sono appuntato e vado a riferirVi.
    Il video in questione ha risentito nell'audio rovinato da fruscii per l'eccesso di manipolazioni, trasformazioni e questo ci porta ad una prima regola ferrea per la manipolazione dei video: conservare sempre, in una cartella a parte, i video originali. Male che proceda, si potrà ripartire dal frammento originale integro!
    Lo dico perché, soprattutto nei casi in cui i frammenti da lavorare sono molti e le operazioni da fare sono tante, alla fine nella cartella di lavoro si ammucchiano tantissimi files, ognuno frutto e figlio di una manipolazione, che si è quasi obbligati a eliminare quelli che sono i passaggi intermedi, pena l'affollamento nella cartella di infiniti video, che alla lunga non si sa più quale video si debba usare come input per fare una determinata trasformazione.

Video dimostrativo di sottotitoli colorati.

    Come esordio di questo articolo, vi metto nuovamente questo comando (già inserito come incipit del primo articolo), comando che restituisce un errore, ma può essere utile per conoscere i dati del file di input, che sono fondamentali per le manipolazioni più complesse, che intendiamo fare su quel video. Per esempio nel ritaglio (crop) del video: se immettiamo valori che vanno al di fuori delle dimensioni di quel video, il filter ci darà errore e terminerà senza eseguire il lavoro di ritaglio che intendevamo fare. Quello che può esserci utile, lo rileviamo nel riquadro inferiore che contiene, nella prima riga (evidenziato) il comando immesso e nelle righe successive l'output della console, sono, per esempio i dati dimensionali del video, ricavati dalla 12° riga: "1920x1080 [SAR 1:1 DAR 16:9], 30 fps" anch'essa evidenziata.
     Dunque dicevo che, facendo il primo video, ho fatto parecchie manipolazioni, ma riporto nel secondo video soltanto l'esperienza della questione sottotitoli. Oltre ovviamente alcuni consigli generali dettati dalla pratica.

$ffmpeg -i complex.mkv
ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.5.0 (GCC)
....
Metadata:
    COM.ANDROID.VERSION: 7.0
    MAJOR_BRAND     : mp42
    MINOR_VERSION   : 0
    COMPATIBLE_BRANDS: isommp42
    ENCODER         : Lavf57.83.100
  Duration: 00:00:51.84, start: 0.000000, bitrate: 5748 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 1k tbn, 60 tbc (default)
    Metadata:
      ENCODER         : Lavc57.64.101 libx264
      DURATION        : 00:00:51.836000000
    Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
    Metadata:
      ENCODER         : Lavc57.64.101 libvorbis
      DURATION        : 00:00:51.783000000
At least one output file must be specified
Comando e output di console.

     Siccome in rete si trova praticamente di tutto ed io mi ero fissato di fare i sottotitoli colorati, avevo già tentato in passato, senza risultato, ma il risultato negativo non era dovuto alla mia incapacità di lavorare sul codice, ma ad un errore interno alla versione di ffmpeg che ho installato sul mio sistema. In pratica mi ero amminchiato con il colore rosso e la corretta immissione esadecimale di esso (#FF0000), mi dava il blu, il giallo dava ciano, il ciano dava nero e così via. Il blu (#0000FF) finalmente mi dava il colore rosso.

    Se non ci si lascia scoraggiare da questi piccoli inconvenienti, a lungo andare, con la pratica ed un poco di passione per quello che si sta facendo (come sul sentiero di guerra è il modo di fare le cose per bene, nel senso inteso dai nativi americani), con ffmpeg si riesce a fare praticamente tutto quello che si può fare con i video.

Sottotitoli

    Ho già spiegato nel primo articolo come compilare un file.srt, per i sottotitoli al momento desiderato nel video. Ora invece voglio concentrarmi su come utilizzare il comando "force_style, per modificare lo stile di tutti i sottotitoli del video. Per sottotitoli con parole singole di colore diverso, utilizzeremo in seguito il file.ass che andremo a modificare in maniera opportuna, dopo averlo generato dal nostro file.srt, sempre come già spiegato in quel primo articolo.

ffmpeg -i input.mp4 -vf subtitles=miofile.srt:force_style='Fontname=DejaVu SansSerif,PrimaryColour=&H0000FF' output.mp4
Comando per forzare lo stile.



    Nel comando si è impostato il colore blu, che dà sottotitoli in carattere rosso, per tutto il video.

    Ora invece andremo a vedere come inserire colori diversi a singole parole o frasi, come potete vedere dal secondo breve video sopra, quello da Ponta Sëlassa (2036), nel quale potete ammirare un bellissimo panorama, dal maestoso Viso fino a molto lontano verso sud.

    Per procedere a fare questo bisognerà analizzare un semplice file.ass, che si può generare sempre dal nostro file.srt, sempre con il comando ffmpeg, come mostrato nel primo articolo.
    Di seguito il file.ass utilizzato per il video sunnominato.

[Script Info]
; Script generated by FFmpeg/Lavc57.64.101
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,0

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:02.00,0:00:14.95,Default,,0,0,0,,{\b1}Mercoledi {\c&HFF00FF}15 novembre{\c} 2023\N{\u1}{\i1}Ponta Selassa{\i0}{\u0}{\b0}
Dialogue: 0,0:00:26.00,0:00:40.00,Default,,0,0,0,,{\b1}Canale telegram e blog:\N{\c&HFFFF00}https://t.me/liberiricercatori{\c}\NBlog:\N{\c&H0000FF}panificiochicco.it/\Nchifelio{\c}{\b0}
Dialogue: 0,0:00:50.00,0:01:12.00,Default,,0,0,0,,{\b1}{\c&HFF0000}Vi saluto e vi abbraccio{\c}\Ntutte e tutti!{\b0}
File.ass utilizzato per modificare i colori del video.



    Come potete vedere, nell'ottava linea del file.ass evidenziata, sono definiti gli stili generali di default, che sono validi per tutti i sottotitoli del video. La linea appena superiore a questa, evidenzia, nello stesso ordine, separato da virgole, a che cosa si riferiscono i valori nella riga successiva. Sapendo questo, diviene possibile modificare i valori su questa linea per avere dei sottotitoli personalizzati per tutto il video. Modificando il Fontname potete scegliere un carattere Serif al posto di Arial. Il terzo valore, Fontsize è intuitivo che riguarda la grandezza dei caratteri. Il quarto valore PrimaryColour è quello del colore del Font e così via, se la Vostra esigenza è quella di avere tutti i sottotitoli personalizzati, ma tutti uguali. Una volta generato il file.ass create i Vostri sottotili come spiegato nell'altro articolo, sostituendo semplicemente nel comando, il nome del file.srt con il nome del file.ass.

    Volendo invece, come anticipato, voler agire sui colori di singole parole o lettere, ci dobbiamo concentrare sulle linee del file.ass che iniziano con Dialogue un poco più sotto, la prima delle quali è evidenziata e che son le linee che riportano i sottotitoli veri e propri.
    Se ci spostiamo sulla stessa linea troveremo delle istruzioni racchiuse tra parentesi graffe del tipo {\c&HFFFF00}, che, se andiamo ad analizzarle, scimmiottano quelle che sono, nello stesso linguaggio del file.ass, quelle che sono le istruzioni per bold oppure underline, rispettivamente {\b1} e {\u1} e che hanno come terminazione rispettibamente {\b0} e {\b0}. Allo stesso modo, la terminazione della istruzione colore sarà {\c}, che ho evidenziato nella prima linea dei sottotitoli.
     Data la complessità della struttura dei files.ass, è assolutamente impensabile editarli ex novo a mano. Mentre invece è assai facile comprendere la struttura dei files.srt, quindi è consigliabile partire da questi ultimi, qualunque sia il nostro progetto sottotitoli.

Considerazioni generali

     Tutta la faccenda della manipolazione dei video, come si evince da questo articolo e dai precedenti, è assai complessa, quindi giova prendere appunti sui comandi che sperimentate. È oltremodo difficile venire a capo, per esempio, dell'invertimento dei colori evidenziato, se non per puro caso, come successo a me. Spesso ci si intestardisce su determinate cose e questo causa insuccesso (voglio i sottotitoli rossi!). Sperimentare è una specie di arte che richiede pazienza unita ad ostinazione, bilanciate con la corretta lucidità ed apertura mentale. Questo è vero sia nella programmazione di qualsivoglia tipo (web, video o di qualunque altro tipo), sia nella vita. Forse più utile che lanciare comandi dalla console, dei quali nel tempo, non rimarrà traccia in memoria ne' altrove, credo sarebbe meglio fare dei piccoli script.sh bash, da salvare con nomi diversi per ogni tentativo e variazione minima. Alla lontana potremo eliminare quelli che non danno risultati e tenere buoni, anche a distanza di lungo tempo, se compilati con annotazioni efficaci, quelli che conducono da qualche parte.

    Precedenti articoli su ffmpeg:
    ffmpeg4.php
    ffmpeg3.php
    ffmpeg.php

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

Articolo n.203: ffmpeg5.php
Sito: chifelio
Tema: 27 - Tecniche di programmazione informatica
Data: 2024-01-11

_______________________________

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!).