021 script per usare FFmpeg per processare vari video

9 Ottobre, 2023 (08:25) | ffmpeg, Linux, Video | By: sargonsei

021 script per usare FFmpeg per processare vari video

#!/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 'video01.mp4' 'video02.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 variable COMANDO
done
#
exit 0 # Lo script termina qui