"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 ffmpeg da linea di comando Linux.
Lunedì 25 aprile 2022

Video in cui prometto un articolo su ffmpeg
C

hiunque si appresta a pubblicare video di qualsiasi genere su YouTube, Brighteon, SharkTube o altre piattaforme, deve rendersi conto che i video non possono essere buttati là, grezzi come sono stati girati, ma necessitano di manipolazioni di vario genere: alcuni pezzi devono essere tagliati; devono essere concatenati più spezzoni per comporre il video con il messaggio che si vuole trasmettere, foss'anche solo un resoconto di una camminata in montagna, non si può girare tutto il percorso; può essere desideroso abbellire il risultato finale con musiche di fondo oppure dei sottotitoli.
     Per fare tutte queste cose sembrerebbe necessario acquistare programmi di manipolazione video costosi e non facilmente utilizzabili. Esistono programmi ed applicazioni gratuite per fare queste cose anche dal cellulare. Chi si contenta di vedere tutte queste cose fatte senza sapere come, può andare benissimo una applicazione per Android come Video Editor Pelicut o magari il programma per PC fornito dalla Sony, action cam che possiedo io, che si chiama PlayMemories. Tenendo però presente che i fornitori del software includono nei video i loro tags a scopi pubblicitari. Ed hanno i loro limiti questi programmi ad interfaccia grafica: potete solo fare le cose che il programmatore ha deciso di lasciarvi fare, il resto è a pagamento. La solita vecchia storia, molto nota a chi pratica i luminari italiani della medicina ufficiale: «Se però viene in clinica, a pagamento, il posto è disponibile subito ed i farmaci sono più validi!»
     Per me che amo sapere sempre cosa sto facendo e che considero l'SO "finestre", come il generatore di virus che dopo fornisce l'anti-virus a pagamento, come spazzatura e sono passato a SO Linux da molto tempo, esistono tantissime alternative a portata di click assolutamente libere ed open source, che ci permettono di fare tutto quello che ci passa per la mente, compreso manipolare i video, senza dover comprare costosi programmi funzionanti [!?] nel suddetto SO windows, di Kill Gates, il quale ha svelato al mondo intero chi essere davvero nella attuale psico-farsa-pandemica.

OTTENERE INFORMAZIONI SUI FILE VIDEO AUDIO
TRASFORMAZIONE VIDEO IN FORMATO DIVERSO
TRASFORMAZIONE VIDEO A QUALITÀ DEFINITA
MODIFICARE L'AUDIO
TOGLIERE L'AUDIO ORIGINALE DI UN VIDEO
SALVARE L'AUDIO DI UN FILE VIDEO IN UN FILE AUDIO
AGGIUNGERE AUDIO AD UN VIDEO
AGGIUNGERE TRACCIA MUSICALE AD UN VIDEO SENZA SOVRASCRIVERE AUDIO ORIGINALE
TAGLIO (video ed audio)
CONCATENAZIONE
SOTTOTITOLI
GENERAZIONE DEL FILE .ass PER SOTTOTITOLI
CREAZIONE VIDEO DA SINGOLA IMMAGINE
CATTURA SCHERMO CON AUDIO
WEBCAM
ROTAZIONE VIDEO
IL VOSTRO LOGO SUL VIDEO
ESTRARRE FOTOGRAMMI DAL VIDEO

     Il più completo strumento di manipolazione di file media, video, immagini ed audio si chiama ffmpeg ed è un potente strumento da linea di comando console, in grado di fare qualsivoglia cosa desideriate fare dei vostri media file. Detto per inciso poi, quei programmi grafici lavorano tutti a suon di comandi ffmpeg!
     Mi ci è voluto un paio di settimane per tentare di capirci qualche cosa, ma vi assicuro che la soddisfazione del "fai da te" in questo settore è davvero grande ed i risultati sono eclatanti, superiori molto più di quanto si possa ottenere con sofisticati programmi ad hoc grafici, ossia con finestre e menu limitati e limitanti. Con ffmpeg da linea di comando è possibile ottenere tutto quanto si possa immaginare dalla manipolazione dei media file. Non ho alcun interesse economico in ffmpeg, per cui il mio entusiasmo è del tutto gratuito e disinteressato. E sto scrivendo questa piccola wiki su ffmpeg ancora da principiante, ma che già ha ottenuto dei risultati, come vedremo più avanti.

     Esempi pratici di trasformazioni con comando ffmpeg

     Premetto che i comandi ffmpeg funzionano sia sui file audio che su quelli video, mutatis mutandis.
     Il primo sito web in cui mi sono imbattuto è stato questo: https://codepre.com/it/mas-de-20-comandos-ffmpeg-para-principiantes.html, che mi ha dato lo spunto per le prime semplici trasformazioni il cui successo ha contribuito ad aumentare il mio interesse per un programma che avevo di default installato sul mio Sistema Operativo fin dal 2005, anno in cui trovai su una rivista il disco di installazione della mia prima versione Slackware 10.2 ossia il mio primo SO Linux. Nel caso non fosse installato, scaricate i pacchetti secondo la vostra distribuzione Linux ed installatelo e divertitevi ad usarlo!
     Per brevità vi risparmio le difficoltà di chi perviene all'universo Linux da un so win, ma voglio porre l'accento sulla completezza della distribuzione Linux, che fornisce tutti gli strumenti possibili ed immaginabili che l'utente windows nemmeno si sogna, vivendo in una matrix dove tutto è a pagamento persino la compressione e decompressione di un file, per scelta di un ideatore che ha sempre preferito produrre virus per poi venderti il software per poterti proteggere da essi, come tendenzialmente ha dimostrato nell'attuale emergenza sanitaria.
     Dal sito di cui al link sopra i primi timidi comandi di trasformazione video.

     OTTENERE INFORMAZIONI SUI FILE VIDEO AUDIO
     Come esordio vi metto questo comando, che non è un vero proprio comando, visto che restituisce un errore, ma può essere utile, per le manipolazioni più complesse, quando sia necessario conoscere la struttura metadati del file audio o video:

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

     Non ho stampato tutto l'output console di questo comando perché è davvero molto lungo, ma soltanto la parte iniziale che è il comando stesso e la parte finale, che sono i "METADATI", in questo caso del video complex.mkv. Come ho evidenziato l'errore è avere omesso l'output file, in quanto quasi tutti i comandi ffmpeg prevedono uno o più input sui quali "lavorare" ed i cui risultati di detto lavoro vengono riversati nel file di output.

     TRASFORMAZIONE VIDEO IN FORMATO DIVERSO per youtube o altre piattaforma:

ffmpeg -i input.mp4 -q:a 0 -q:v 0 output.flv

     TRASFORMAZIONE VIDEO A QUALITÀ DEFINITA

     La cosa va fatta per gradi, siccome la funzione ffmpeg che cattura schermo, ad esempio, funziona bene se si producono video in formato.mkv, a volte si rendono necessarie molte modifiche puntuali, per poter, ad esempio concatenare dei file video, è necessario che abbiano lo stesso formato di risoluzione e ratio. Ecco il motivo del primo comando per conoscere i metadati, comando che sembrerebbe un errore.
     La seguente modifica la risoluzione e ratio DAR:

ffmpeg -i input.mkv -vf scale=1368:768,setdar=1:1 output.mkv 

     (o altri formati e ratio. Può essere anche setsar=1:1 per modificare ratio SAR)
     Questa questione della trasformazione dei formati diverrà più chiara in seguito, quando si affronterà il problema della CONCATENAZIONE di più video insieme per formare un video composto da frammenti girati in momenti e situazioni diverse. Finché si lavora con video provenienti dalla stessa camera, non sussistono problemi di sorta. Ma se si devono mettere insieme, ad esempio, video girati con device diversi tra loro, allora nascono problemi di concatenazione anche importanti, ma sempre risolvibili con qualche comando ffmpeg ad hoc.

     MODIFICARE L'AUDIO
     La seguente per modificare l'audio basso di un filmato o di un audio; a seconda dei valori di "volume=0.5" inferiori o maggiori di uno, l'audio viene incrementato oppure decrementato:

ffmpeg -i input.mp4 -q:v 0 -filter:a 'volume=2.5' output.mp4

ffmpeg -i input.mp3 -q:a 0 -filter:a 'volume=0.04' output.mp3

     Può accadere questa necessità quando un audio risulta troppo basso o troppo alto. Nel caso invece che l'audio originale del video sia inservibile, si rende necessario eliminarlo ed esso potrà essere reinserito registrandone un altro migliore per sostituire il primo.

     TOGLIERE L'AUDIO ORIGINALE DI UN VIDEO
     Questo può rendersi necessario quando l'audio originale del video non è buono, oppure quando fate dei video dalle immagini. Se usate le opzioni con audio per avere il sonoro ( vedi), mentre ffmpeg esegue per esempio la creazione di un video da una o più immagini, registra l'audio dal microfono di sistema. Questo può essere utile se volete registrere direttamente l'audio mentre effettuate questa trasformazione, ma risultare nociva se passa un'ambulanza o se vi viene da tossire. Una alternativa potrebbe essere quella di azzerare il microfono di sistema mentre state facendo un'operazione come questa, ma se scordate di farlo è sempre possibile azzerare l'audio e/o sostituirlo.
     La seguente TOGLIE l'audio di un filmato (provato funziona):

ffmpeg -i inputconaudio.mp4 -an outputtoltoaudio.mp4

     SALVARE L'AUDIO DI UN FILE VIDEO IN UN FILE AUDIO

ffmpeg -i input.MP4 -vn audio.mp3

     AGGIUNGERE AUDIO AD UN VIDEO
     Il seguente comando unisce un audio ad un video. Occorre però fare attenzione che audio e video siano della stessa durata, altrimenti prolunga il video nell'immagine finale ripetuta fino al termine dell'audio:

ffmpeg -i inputvideosenzaaudio.mp4 -i audio.mp3 -map 0 -map 1 -codec copy outputvideoconaudio.mp4


ffmpeg -i inputvideo.mp4 -i imputaudio.mp3 -map 0 -map 1 -codec copy output.mp4

     AGGIUNGERE TRACCIA MUSICALE AD UN VIDEO SENZA SOVRASCRIVERE AUDIO ORIGINALE

ffmpeg -i inputvideo.mp4 -i inputmusic.mp3 -map 0:v -map 1:a -c:v copy -shortest outputvideosound.mp4

     Questa sopra copre l'audio originale e accorcia il video alla lunghezza della traccia audio, se la traccia audio è più corta del video ( -shortest). Per aggiungere la traccia musicale senza cancellare l'audio originale del video, servirsi della seguente:

ffmpeg -i input.mp4 -i inputsound.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" -map 0:v -map "[a]" -c:v copy -ac 2 -shortest outputvideosound.mp4

     TAGLIO (video ed audio)
     Allora, di seguito, il taglio dell'audio per il tempo necessario:

ffmpeg -ss 0 -t 10 -i inputaudio.mp3  -codec copy audio10sec.mp3

ffmpeg -ss 01:24:00 -t 77 -i alba.mp4 -codec copy albatagliata.mp4

     L'opzione -ss 01:24:00 specifica il punto di inizio del taglio, mentre l'opzione -t 77 indica il numero di secondi dal punto di inizio: il file di output parte dal punto inizio per il tempo in secondi -t specificato.

     CONCATENAZIONE
     La concatenazione di file dello stesso tipo e formato è piuttosto semplice. Si crea un file testo con l'elenco dei file da concatenare strutturato nel file "mylist.txt", nel seguente modo:

#questo è un commento
file 'video_1.mp4'
file 'video_2.mp4'
file 'video_3.mp4'

     Dopo di che, con il comando seguente, la concatenazione avviene in un lampo.

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.wav 

     Salvo che con video di qualità diversa si creano molti problemi. Ne approfitto per indirizzare al sito wiki di ffmpeg, dove si trova una ricca documentazione per la quale serve soltanto la pazienza di leggere con attenzione:
    https://trac.ffmpeg.org/wiki
     Per il nostro problema di concatenazione, ho trovato sufficienti spiegazioni su https://trac.ffmpeg.org/wiki/Concatenate#differentcodec
     Di seguito il comando per unire 4 video, con l'attenzione che abbiano lo stesso formato video e ratio, altrimenti il comando dà errore. Nel qual caso si veda più in alto la TRASFORMAZIONE VIDEO A QUALITÀ DEFINITA.

ffmpeg -i input1.mp4 -i input2.mkv -i input3.mkv -i input4.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0][3:v:0][3:a:0]concat=n=4:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" complex.mkv

     Questo comando sortisce concatenazioni impeccabili se i prerequisiti sono come detto sopra.
     La penultima difficoltà consiste nel concatenare video di fronte e retro cellulare, che sono quelli che personalmente mi hanno creato maggiori problemi. Sempre all'interno di questo problema esiste ancora la difficoltà dell'orientamento, a seconda che usiamo per filmare il telefono in verticale oppure orizzontale. Mentre l'ultima difficoltà consiste nell'utilizzare per la concatenazione video ottenuti con la webcam del PC a video ottenuti con un'altra camera e/o con il telefono e, infine, video ottenuti catturando lo schermo del proprio PC.

ffmpeg -i schermotel.mp4 -i retrotel.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" complex.mp4

    Fronte e retro telefono si concatenano perfettamente con le opzioni di cui sopra, ma entrambi con lo stesso orientamento del telefono.
     Affrontiamo più sotto la complicata unione di un video catturato con il telefono verticale, con gli altri due in orizzontale, il che viene trattato sotto la voce ROTAZIONE VIDEO.

     SOTTOTITOLI
     Qui sotto un elenco di siti dove ho tratto le informazioni per i sottottitoli da aggiungere ai video:
     https://www.checksub.com/subtitle/srt-file-create-manually-automatically/
     https://docs.fileformat.com/video/srt/
     https://en.m.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/subtitle_options
     https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo
     In linea di massima la questione dei sottotitoli viene risolta creando un file.srt che contiene i dati dei sottotitoli come vedremo in seguito e si aggiungono con il seguente comando:

ffmpeg -i ffmpeg.mp4 -vf subtitles=ffmpeg.srt ffmpegsubtitles.mp4

     Se il file .srt ha lo stesso nome del file video, estensione a parte, normalmente i lettori come VLC leggono automaticamente i sottotitoli.
     Qui sotto l'esempio del file .srt che contiene i sottotitoli:

1
00:00:01,000 --> 00:00:04,950
<b>Venerdi 8 aprile 2022</b>

2
00:00:05,000 --> 00:00:10,000
<u><b>Argilla per riparazioni
stufe e forni e
oggetti di vasellame</b></u>

3
00:00:25,000 --> 00:00:35,000
<b>Raccolta nella cava</b>

4
00:01:22,000 --> 00:01:47,000
<b>Dopo alcuni giorni di seccatura
in ambiente caldo, setacciatura</b>

5
00:02:02,000 --> 00:02:10,000
<b>Prova impasto argilla pura
per oggetti in terracotta</b>

6
00:03:02,000 --> 00:03:20,000
<b>Conclusioni:
per riparazione forni e stufe
usare miscela cemento argilla</b>

7
00:03:44,000 --> 00:04:14,854
<b>Vi abbraccio tutte e tutti
Esempio di file.srt con i sottotitoli.
Come si vede i sottotitoli devono essere separati da una linea vuota. Numero sottotitolo, tempo inizio separato da " --> " tempo fine. Sono ammesse bold italic underline dell'HTML. Inoltre si deve far notare l'acapo anche a metà della parola che si rende necessario perché, se le frasi sono troppo lunghe non possono stare su una riga sola nel video in quanto non si vedrebbero per intero.

     GENERAZIONE DEL FILE .ass PER SOTTOTITOLI Oltre ai file.srt esiste la possibilità di inserire i sottotitoli nei file.ass.
     ffmpeg è in grado di generare un file.ass partendo dal file.srt con il seguente comando:

ffmpeg -i sub.srt sub.ass

     Come si potrà vedere aprendo il file sub.ass nell'area più in basso.

[Script Info]
; Script generated by FFmpeg/Lavc57.107.100
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:09.95,Default,,0,0,0,,{b1}Giovedi 14 aprile 2022{b0}
Dialogue: 0,0:00:12.00,0:00:20.00,Default,,0,0,0,,{u1}{b1}Oggi parliamo della guerra mediatica{b0}{u0}
Dialogue: 0,0:00:21.00,0:00:35.00,Default,,0,0,0,,{b1}Musica di sottofondo:NThick as a brick Jethro TullNAlbum  A Classic Case 1985{b0}
Dialogue: 0,0:01:06.00,0:01:38.00,Default,,0,0,0,,{b1}Blog: http://panificiochicco.it/chifelio/NCanale Telegram:Nhttps://t.me/liberiricercatori{b0}
Dialogue: 0,0:02:50.00,0:03:34.00,Default,,0,0,0,,{u1}{b1} Il pensiero CREA la nostra REALTA'{b0}{u0}
Dialogue: 0,0:04:30.54,0:05:09.40,Default,,0,0,0,,{b1}Vi abbraccio tutte e tuttiNVi voglio bene!{b0}
Esempio di file.ass.

    Questo è altamente strutturato e dovrebbe essere possibile modificare font e colore di esso, ma la modifica manuale che ho tentato non ha sortito l'effetto desiderato: codificando il rosso ottengo sottotitoli blu. Per impostazione naturale i sottotitoli sono in bianco. Vengono però riportate le indicazioni HTML che riguardano bold, italic e underline che si possono immettere nel file.srt. Il font style viene ignorato. In ogni caso, riuscendo a capire come modificare correttamente il colore, esso è impostato per tutti i sottotitoli del video e non singolarmente per ogni voce di sottotitolo.

     CREAZIONE VIDEO DA SINGOLA IMMAGINE
     La prima genera un video partendo dall'immagine raccomandate.jpg della durata di (-t 45) 45 secondi senza traccia audio:

ffmpeg -loop 1 -i raccomandate.jpg -c:v libx264 -t 45 -pix_fmt yuv420p outracc.mp4

     Mentre la seguente crea la traccia audio che viene registrata, volendo, dal microfono di sistema durante la creazione del video da una immagine. Altrimenti è sempre possibile aggiungere un audio nuovo (vedi AGGIUNGERE AUDIO AD UN VIDEO) al video generato come sotto:

ffmpeg -f alsa -ac 2 -i pulse -framerate 25 -loop 1 -i IMG-20210804-WA0001.jpg -q:a 0 -q:v 0 -c:v libx264 -t 45 -pix_fmt yuv420p affamati.mp4

     Così, quando si devono fare cose di questo genere si può registrare contemporaneamente l'audio.
     Sul sito di ffmpeg viene illustrato anche il modo di creare video con molte immagini, ma io non sono riuscito ad ottenere un buon risultato, con nessuno dei metodi descritti. Così per fare un video con una serie di immagini ho fatto singoli video da ogni immagine poi li ho uniti in un solo video.

     CATTURA SCHERMO CON AUDIO

ffmpeg -f alsa -ac 2 -i pulse -r 25 -s 1368x768 -f x11grab -i :0.0+0,0 -vcodec msmpeg4v2 -qscale 2 -framerate 25 -q:a 0 -q:v 0 definitiv2.mkv

     Usare tassativamente formato .mkv indi eventualmente convertire dopo. Ho praticamente tribolato due giorni pieni a catturare lo schermo intero, del quale occorre conoscere la risoluzione (il mio ovviamente è -s 1368x768) con una riceca qui: https://www.linuxquestions.org/questions/linux-software-2/ffmpeg-not-capturing-desktop-4175642373/
     Per catturare solo una parte dello schermo ho dovuto rinunciare alla risoluzione dello schermo e catturare solo il video che sta in una pagina web, come quando si guarda una pagina youtube:

ffmpeg -f alsa -ac 2 -i pulse -r 25 -f x11grab -i :0+42,114 -vcodec msmpeg4v2 -qscale 2 -framerate 25 -q:a 0 -q:v 0 elioc0ses.mkv

     Se non si conoscono esattamente le coordinate dell'area che si intende catturare si può procedere per prove ed errori, fino a che si ottiene un video che catturi esattamente quello che si vuole.

     WEBCAM

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 -t 0:10 webcam.mkv

     Naturalmente occorre appurare che la vostra webcam sia riconosciuta dal sistema, ossia che il device /dev/video0 esista nel sistema. Un modo per appurarlo consiste nel digitare sulla vostra console il comando:

$v4l2-ctl --list-devices
HP Webcam (usb-0000:00:15.0-5):
        /dev/video0

     Questo è stato uno dei miei crucci nel tentativo di fare lo streaming con la mia action cam Sony wi-fi: il fatto che si sia connessi tramite wi-fi oppure tramite USB, non significa automaticamente condividere i files e fare lo streaming, da detta camera, come si può vedere qui:

$lsusb
Bus 002 Device 002: ID 1058:25a2 Western Digital Technologies, Inc. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 005: ID 04f2:b5db Chicony Electronics Co., Ltd Bus 001 Device 004: ID 8087:0aa7 Intel Corp. Bus 001 Device 008: ID 054c:08b6 Sony Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

     Come si vede in questo caso, il SO riconosce la camera ed è possibile trasferire files, ma non si può fare lo streaming da essa.
     Chiusa la parentesi per il riconoscimento dei devices connessi e riconosciuti dal sistema, consideriamo che il precedente comando per la webcam, cattura il video senza suono. Ma, aggiungendo i comandi alsa pulse:

ffmpeg -f alsa -ac 2 -i pulse -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 webcam.mkv

     OK! Con l'aggiunta abbiamo anche l'audio. Per il tempo di registrazione o si indica -t [secondi], come fatto nel primo comando sopra, oppure esiste un comando per stoppare: premere q per stoppare la registrazione. Ho però constatato che occorre attendere un tantino di tempo, circa 10 secondi perché premendo q stoppa subito e a volte rimane tagliato il finale. Se il video, ritardando a premere q risultasse troppo lungo, è sempre possibile tagliarlo alla fine, come illustrato più sopra.
     Dal sito https://ffmpeg.org/ffmpeg-all.html#video4linux2_002c-v4l2:

ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0

     Il comando ffplay mostra l'output webcam in una finestra

ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg

     (cattura in out.mpeg)

Immagine del video girato con
telefono in verticale.
Per essere concatenato a quelli girati in
orizzontale
deve essere ritagliata la parte centrale.

     ROTAZIONE VIDEO

ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4

     Il comando "traspose=2" ruota il video di 180°. Il valore 1 ruota di 90°
     https://codepre.com/it/como-rotar-videos-usando-ffmpeg-desde-la-linea-de-comandos.html
    Infine la soluzione ad un annoso problema, quello dei video ripresi con diversi orientamenti del telefono: verticale o orizzontale. Questa faccenda è un pochino complessa ed ho dovuto metterci del mio in quanto l'autore del sito sotto faceva ruotare il video di 90° ed io mi trovavo punto ed a capo col problema di partenza. Quindi omettendo la rotazione sono riuscito a ricavare un video ricavato da registrazione col telefono in verticale, da unire agli altri del telefono catturati col telefono in orizzontale.
     https://www.rigacci.org/wiki/doku.php/doc/appunti/linux/video/fix_smartphone_portrait_videos Si tratta di una soluzione di compromesso per video girati con telefono in verticale, ossia creare destra e sinistra sfocate del video originale (cosa che i programmi grafici video fanno). È una faccenda un po' complessa in diversi passi:
     1: Si ritaglia una sezione centrale del video che vada bene in altezza per il video orizzontale
     2: si crea un finto background annebbiando la regione ritagliata e la si stira a 16:9 ratio
     3: si sovrappone la prima regione ritagliata del video sopra il finto retroscena 2
     https://devdev.it/ritagliare-crop-un-video-con-ffmpeg-975/
1:

ffmpeg -i verticale.mp4 -vf "crop=1080:960:0:480" VERTIC.mp4  
 

     (misure per video mio telefono:)

ffmpeg -i verticale.mp4 -vf "crop=W:H:x:y" VERTIC.mp4 

dove:
W = larghezza
H = altezza
x = coordinata orizzontale in pixel dalla quale iniziarà il ritaglio
y = coordinata verticale in pixel dalla quale iniziarà il ritaglio

Immagine del video ritagliata
la parte centrale,
come segnato nel video a destra.

2:

ffmpeg -i VERTIC.mp4 -c copy -metadata:s:v:0 rotate=0 tmp_norotate.mp4

     2/bis (crea png per extra larghezza):

convert -size 768x768 -define "gradient:bounding-box=768x38+0+0" -define "gradient:vector=0,37,0,0" gradient:none-black -define "gradient:bounding-box=768x768+0+730" -define "gradient:vector=0,730,0,767" gradient:none-black -composite -channel a -negate tmp_mask.png

     E infine:

ffmpeg -i VERTIC.mp4 -loop 1 -i tmp_mask.png -filter_complex "[0:v]split [a][b];[a]crop=720:720:0:280,scale=768:768,setdar=768/768 [crop];   [b]crop=720:720:0:280,scale=1366:768,setdar=16/9,avgblur=54 [back]; [1:v]alphaextract [mask]; [crop][mask]alphamerge [masked]; [back][masked]overlay=299:0" video_out.mp4

     Sono riuscito dopo molti tentativi ad ottenere il video in verticale come volevo perché l'autore del sito aveva inserito transpose=1 che mi ruotava il video.
     A modo mio...

Immagine del video allungato e
annebbiato

     Ma giunto a questo punto devo ammettere di non averci capito molto dei passaggi 2 e 3, così come sono stati fatti, con più operazioni contemporaneamente, come l'estensione del video ricavato dal passo 1, la creazione di un fondo annebbiato e la sovrapposizione dei due video. Ho cercato quindi di fare un passo alla volta: dal video del passo 1 ho allargato il video:

ffmpeg -i VERTIC.mp4 -vf scale=1920:1080,setdar=16:9 vertallungato.mp4

     come descritto al punto TRASFORMAZIONE VIDEO A QUALITÀ DEFINITA, tanto per capire cosa stavo facendo. Infine ho applicato a quest'ultimo video il filtro "blur", anche se non ne capisco bene la sintassi, ma mi si perdoni essendo un novellino:

ffmpeg -i vertallungato.mp4 -q:a 0 -filter_complex "[0:v]boxblur=10[bg];[0:v]crop=60:60:10:10[fg];[bg][fg]overlay=100:500" -map 0:v  annebbiatovideo2.mp4

     Comando tratto da https://ottverse.com/blur-a-video-using-ffmpeg-boxblur/
     Questo comando, perlomeno ha determinato quello che andavo cercando, ossia il video di cui al punto precedente è stato trasposto in un video annebbiato, che sarebbe lo sfondo di base per inserire il video più piccolo ritagliato dalla ripresa verticale del telefono. Rimarrebbe da sovrapporre i due video per ottenere il risultato precedente, ma sono stanco e non voglio tediare eventuali lettori più a lungo. Credo che avendo affrontato molti temi dell'uso di ffmpeg, ognuno possa approfondire dove ne sente necessità. Questi passaggi sono documentati dalle immagini che vedete.

     LOGO IN VIDEO

Immagine del video con logo inserito

     Se volete inserire nei vostri video un piccolo logo in png:

ffmpeg -i video.mp4 -i ../logovideo.png -filter_complex "overlay=20:20" outputconlogo.mp4

     Tratto quest'ultimo da: https://arccoder.medium.com/ffmpeg-add-a-logo-on-video-bf1f4652792a

     ESTRARRE FOTOGRAMMI DA VIDEO
     Quest'ultima cosa non l'avevo cercata per esigenze dei miei video, ma mi è stata richiesta così ho trovato il seguente comando che funziona.

ffmpeg -i myvideo.mp4 -filter:v fps=fps=1/4 shot/foto_%d.png


     Un accorgimento per scegliere più o meno scatti, è quello di agire sul denominatore della frazione "fps=1/4" quanto più il denominatore cresce, più diminuisce il numero degli scatti. Fare dei tentativi per ottenere il vostro numero desiderato.

     Ovviamente questa piccola wiki non è completa, ma è tutto quello che sono riuscito ad imparare da me e la voglio condividere con quanti hanno la passione dei video. Mancherebbe ancora come ottenere delle animazioni .gif da un video, ma al momento non era in cima ai miei interessi. Mancherebbe la sovrapposizione su un solo video di diversi video che si contendono un rettangolino dello schermo...Si può fare di tutto con questo comando!
     Altra ovvietà, quando sono necessari sempre certi definiti passaggi per la trasformazione e mixaggio dei video, è sempre possibile disporre i comandi qui illustrati, in un file di shell bash, ma questo è un altro discorso, un'altra wiki eventualmente, ma chi fosse interessato alla programmazione della shell in rete ci sono infinità di esempi. Tenendo presente che tutti i comandi eseguibili da linea di comando sono altresì eseguibili in un programma.
     Un'ultima raccomandazione. Sottotitoli e logo devono essere l'ultima operazione che fate sui vostri video, altrimenti potrebbero non essere riportati in elaborazioni successive, a meno di fissare definitivamente i due nei codec del video, cosa che non ho ancora verificato. Potrebbe essere che i sottotitoli fissati col file.ass siano permanenti, ma quelli con file.srt non lo sono, anche se, avendo video e file.srt lo stesso nome, i sottotitoli vengono letti dai lettori video.
     Riassumendo in due righe. Per prima cosa rendere i video da mixare possibilmente con uguali METADATA. Mettere audio prima o dopo del montaggio non ha importanza. Penultimo il fissaggio di un vostro logo (anche se credo possa essere messo nei singoli video) ed infine i sottotitoli. A questo proposito, quando riuscirò ad ottenere sottotitoli scorrevoli aggiornerò questa wiki.
     Spero in futuro, se risolverò il problema dello streaming dalla mia Sony ActionCam HDR_AS30 di postarvi la soluzione.

     Vi abbraccio tutte e tutti.
    Vi voglio bene.
     Claudio.

Articolo n.186: ffmpeg.php
Sito: chifelio
Tema: 27 - Tecniche di programmazione informatica
Data: 2022-04-25

_______________________________

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