Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
  Condividi: Facebook Twitter
Guida - Script di FFmpeg per elaborare files multimediali
#1
In questo post, ho inserito le righe di uno script utilizzabile per elaborare convertire files multimediali utilizzando FFmpeg.
Codice:
#!/bin/bash # ./scriptElaboraVariVideo1.txt # Questo script serve per applicare le medesime trasformazioni a vari files multimediali # presenti nella medesima cartella di lavoro. # conservando intatti i files multimediali. # Si ricorda che FFmpeg, per stabilire quali siano i parametri di default (quindi non impostati dall'utente): # - ricava i codec audio e video di default basandosi sull'estensione del file in uscita; # - ricava i parametri dimensionali di default utilizzando i medesimi parametri del file in entrata; # quindi tutte le righe dello script relative a parametri per i quali si vuole usare i parametri di default # devono essere commentate anteponendovi un #. # EXT=".mp4" # Imposta estensione di ciascun file multimediale elaborato PAR0='' # Definisce PAR0 come una variabile vuota PAR0=' -noautorotate' # Imposta "ignora rotazione automatica" # PARAM="" PAR=' -c:a aac'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Imposta CODEC audio # PAR=' -c:a copy'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Imposta copia CODEC audio # PAR=' -an'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Elimina audio PAR=' -filter:a areverse'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Imposta audio a ritroso PAR=' -filter:a atempo=2.0'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Imposta la velocità AUDIO moltiplicandola per 2,0 PAR=' -filter:a volume=1.5'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Imposta il volume AUDIO moltiplicandolo per 1,5 PAR=' -filter:a afade=in:st=0:d=1,afade=out:st=32:d=1'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM  # Dissolvenza audio PARAM=${PARAM/'-filter:a '/'0a0'}; PARAM=${PARAM//' -filter:a '/','}; PARAM=${PARAM/'0a0'/'-filter:a '}; echo 'Opzioni:'$PARAM # PAR=' -c:v libx264'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Imposta CODEC video # PAR=' -vn'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Il file multimediale in uscita sarà privo di video # PAR=' -filter:v hflip'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Specchia Destra-Sinistra PAR=' -filter:v vflip'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Specchia Alto-Basso PAR=' -filter:v transpose=0'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Specchia e gira di 90 gradi in senso antiorario il video in ingresso PAR=' -filter:v transpose=1'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Gira di 90 gradi in senso orario il video in ingresso PAR=' -filter:v transpose=2'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Gira di 90 gradi in senso antiorario il video in ingresso PAR=' -filter:v transpose=3'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Specchia e gira di 90 gradi in senso orario il video in ingresso PAR=' -filter:v reverse'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Inverte il senso del video PAR=' -filter:v rotate=30*(PI/180)'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Ruota di 30 gradi in senso orario ciò che compare nel file multimediale in ingresso, ma lo schermo non viene ruotato. PAR=' -filter:v setpts=2.0*PTS'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Dimezza la velocità del video PAR=' -filter:v fade=in:0:30,fade=out:960:30'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Dissolvenza video PAR=' -filter:v scale=800:600'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Il video in uscita avrà risoluzione 800x600 pixels PAR=' -filter:v scale=800:-1'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # La larghezza del video in uscita diventa 800 pixels, e l'altezza viene modificata rispettando le proporzioni del video in ingresso PAR=' -filter:v pad=width=2049:height=1152:x=500:y=300:color=green'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Sovrappone il video in ingresso ad uno sfondo verde largo 2049 pixels ed alto 1152 pixels PAR=' -filter:v crop=640:360:320:120'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Ritaglia un video largo 640 pixels ed alto 360 pixels di cui il pixel in alto a sinistra dista 320 pixels dal bordo sinistro e 120 pixels dal bordo superiore del video in ingresso PARAM=${PARAM/'-filter:v '/'0a0'}; PARAM=${PARAM//' -filter:v '/','}; PARAM=${PARAM/'0a0'/'-filter:v '}; echo 'Opzioni:'$PARAM # PAR=' -s 800x600'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Il video in uscita avrà risoluzione 640x360 pixels # PAR=' -ss 10:23:45.67'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Il file multimediale in uscita inizia 10 ore, 23 minuti, 45 secondi e 67 centesimi di secondo dall'inizio del file multimediale in ingresso # PAR=' -to 12:34:56.78'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Il file multimediale in uscita termina 12 ore, 34 minuti, 56 secondi e 78 centesimi di secondo dall'inizio del file multimediale in ingresso # PAR=' -t 01:23:45.67'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Il file multimediale in uscita termina 1 ora, 23 minuti, 45 secondi e 67 centesimi di secondo dall'inizio del file multimediale in uscita # PAR=' -fs 50M'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Il file multimediale in uscita termina quando raggiunge le dimensioni di 50M # # PAR=' -map 0:v:0 -map 1:a:0'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Crea file multimediale contenente il video del file multimediale 0 (il primo) e l'audio del file multimediale 1 (il secondo) la cui durata è la medesima del più LUNGO dei due files multimediali in ingresso. # PAR=' -map 0:v:0 -map 1:a:0 -shortest'; PARAM=$PARAM$PAR; echo 'Opzioni:'$PARAM # Crea file multimediale contenente il video del file multimediale 0 (il primo) e l'audio del file multimediale 1 (il secondo) la cui durata è la medesima del più CORTO dei due files multimediali in ingresso. # for VIN in '20231102_223950a.mp4' # Lista files multimediali da elaborare do     VOUT='prefisso-'${VIN::-4}'-suffisso'$EXT # Imposta nome ed estensione del video elaborato     COMANDO='ffmpeg'$PAR0' -i '$VIN$PARAM' '$VOUT     echo; echo "Ora verrà eseguito il comando"     echo $COMANDO # Visualizza il contenuto della variable COMANDO     $COMANDO # Esegue il comando contenuto della variabile COMANDO done # exit 0 # Lo script termina qui
A scanso di equivoci, preciso che lo script è stato provato con successo con il computer computer seguente:
Codice:
$ inxi -S System:   Host: i7-11390H Kernel: 6.1.0-13-amd64 arch: x86_64 bits: 64     Desktop: Cinnamon v: 5.8.4 Distro: LMDE 6 Faye $
che ha creato ed eseguito senza alcun problema il comando 
Codice:
ffmpeg -noautorotate -i 20231102_223950a.mp4 -c:a aac -filter:a areverse,atempo=2.0,volume=1.5,afade=in:st=0:d=1,afade=out:st=32:d=1 -c:v libx264 -filter:v hflip,vflip,transpose=0,transpose=1,transpose=2,transpose=3,reverse,rotate=30*(PI/180),setpts=2.0*PTS,fade=in:0:30,fade=out:960:30,scale=800:600,scale=800:-1,pad=width=2049:height=1152:x=500:y=300:color=green,crop=640:360:320:120 -s 800x600 prefisso-20231102_223950a-suffisso.mp4
tuttavia nel web si trovano molti esempi che danno ad intendere che: su PC diversi, potrebbe essere necessario mettere le opzioni "fra virgolette", ragion per cui il comando diventerebbe
Codice:
ffmpeg -noautorotate -i 20231102_223950a.mp4 -c:a aac -filter:a "areverse,atempo=2.0,volume=1.5,afade=in:st=0:d=1,afade=out:st=32:d=1" -c:v libx264 -filter:v "hflip,vflip,transpose=0,transpose=1,transpose=2,transpose=3,reverse,rotate=30*(PI/180),setpts=2.0*PTS,fade=in:0:30,fade=out:960:30,scale=800:600,scale=800:-1,pad=width=2049:height=1152:x=500:y=300:color=green,crop=640:360:320:120" -s 800x600 prefisso-20231102_223950a-suffisso.mp4

Inoltre ho verificato che computer meno potenti di quello da me usato potrebbero non riuscire a elaborare tutti i parametri contemporaneamente; se ciò si verifica, occorre sottoporre il file da elaborare a più conversioni diverse successive, in modo da dilazionare nel tempo il carico di lavoro a cui si sottopone la CPU.
Saluto.
Sargon6
Cita messaggio
#2
Molto specialistico ma interessante.
Grazie per il contributo!
________________________________________________________
Sono così avanti che quando mi guardo indietro vedo il futuro.
La mia Montagna: https://it.wikiloc.com/wikiloc/user.do?id=2317869
Cita messaggio


Vai al forum:


Utenti che stanno guardando questa discussione: 1 Ospite(i)