22/10/2023, 20:40
(Questo messaggio è stato modificato l'ultima volta il: 22/10/2023, 22:26 da Sargon6.)
(22/10/2023, 19:50)m3nhir Ha scritto: Se ho ben capito la variabile $IN contiene l'elenco di tutti i files da modificare.Si, ma non contemporaneamente.
Secondo me è quello il problema. ffmpeg probabilmente non accetta quel tipo di input.
Potresti provare da usare "for" per ottenere quello che vuoi (anche all'interno di un ciclo while)
https://wwwcdf.pd.infn.it/AppuntiLinux/a...lindex5904
La variabile $IN contiene il nome di tutti i files da modificare, ma non contemporaneamente, bensì uno alla volta.
tant'è che lo script
Codice:
!/bin/bash
echo "#!/bin/bash" > ESEGUE.txt
while read IN; do
OUT='elaborato-'${IN::-4}'-crop'${IN:(-4)} # Imposta nome ed estensione del file audiovisivo elaborato
Y=$((480+0)) # Imposta l'altezza del file audiovisivo elaborato
X=$((Y*3/2)) # Imposta la larghezza del file audiovisivo elaborato
X1=300 # Imposta la distanza dal lato sinistro
Y1=100 # Imposta la distanza dal lato superiore
COMANDO='ffmpeg -i '$IN' -vf crop='$X':'$Y':'$X1':'$X2' -acodec copy '$OUT # Costruisce il comando
echo $COMANDO >> ESEGUE.txt # Crea script intermedio
# $COMANDO # Questo comando, se eseguito, termina il ciclo while
done < lista.txt
./ESEGUE.txt
Ma forse è un problema proprio del ciclo while... cercherò qualche alternativa ...
---
edit
---
il ciclo until non fornisce risultati diversi...
Lo script
Codice:
#!/bin/bash
# ./elaboraLista02.txt
echo "#!/bin/bash" > ESEGUE.txt
COUNTER=3
until [ $COUNTER -lt 1 ]; do
read IN
echo $IN
OUT='elaborato-'${IN::-4}'-crop'${IN:(-4)} # Imposta nome ed estensione del file audiovisivo elaborato
Y=$((480+0)) # Imposta l'altezza del file audiovisivo elaborato
X=$((Y*3/2)) # Imposta la larghezza del file audiovisivo elaborato
X1=300 # Imposta la distanza dal lato sinistro
Y1=100 # Imposta la distanza dal lato superiore
COMANDO='ffmpeg -i '$IN' -vf crop='$X':'$Y':'$X1':'$X2' -acodec copy '$OUT # Costruisce il comando
echo $COMANDO >> ESEGUE.txt
$COMANDO # Questo comando, se eseguito, termina il ciclo until
done < lista.txt
# ./ESEGUE.txt
Codice:
./elaboraLista02.txt: riga 8: -4: expressione di sottostringa < 0
---
edit
---
Nemmeno il ciclo for fornisce risultati diversi...
lo script
Codice:
#!/bin/bash
# ./elaboraLista03.txt
echo "#!/bin/bash" > ESEGUE.txt
COUNTER=3
for COUNTER in `seq 1 3`; do
read IN
echo $IN
OUT='elaborato-'${IN::-4}'-crop'${IN:(-4)} # Imposta nome ed estensione del file audiovisivo elaborato
Y=$((480+0)) # Imposta l'altezza del file audiovisivo elaborato
X=$((Y*3/2)) # Imposta la larghezza del file audiovisivo elaborato
X1=300 # Imposta la distanza dal lato sinistro
Y1=100 # Imposta la distanza dal lato superiore
COMANDO='ffmpeg -i '$IN' -vf crop='$X':'$Y':'$X1':'$X2' -acodec copy '$OUT # Costruisce il comando
echo $COMANDO >> ESEGUE.txt
$COMANDO # Questo comando, se eseguito, termina il ciclo for
done < lista.txt
# ./ESEGUE.txt
Codice:
./elaboraLista03.txt: riga 8: -4: expressione di sottostringa < 0
Comandi da ricordare:
http://sargonsei.altervista.org/15_bash/
http://sargonsei.altervista.org/15_bash/