Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
  Condividi: Facebook Twitter
[Risolto] Lo script bash non esegue il ciclo while
#9
(22/10/2023, 19:50)m3nhir Ha scritto: Se ho ben capito la variabile $IN contiene l'elenco di tutti i files da modificare.
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
Si, ma non contemporaneamente.
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
funziona, ma mi sembra strano che si debba per forza creare uno script intermedio...
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
ha il medesimo problema... in più, se avviato da terminale, mostra la riga
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
ha il medesimo problema... e anche questo, se avviato da terminale, mostra la riga

Codice:
./elaboraLista03.txt: riga 8: -4: expressione di sottostringa < 0
Se nessuno ha un'idea su cos'hanno che non va questi 3 script, mi sa che mi dovrò accontentare della soluzione con script intermedio.
Cita messaggio


Messaggi in questa discussione
RE: Lo script bash non esegue il ciclo while - da Sargon6 - 22/10/2023, 20:40

Vai al forum:


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