Hi,
I have a little mystery.
I’m trying to convert a list of .mpg files to .avi using ffmpeg. For this, I’m using this construction:
while read FILES ; do
ffmpeg call
done < $0.lista
The list contains (for testing) 3 files, but it only does the first one. It seems as if the ffmpeg
call is capturing the pipe. If I replace that line with an echo, it runs perfect. If the ffmpeg call
has a syntax error and fails, the script runs correctly, passing the three files. But if ffmpeg
runs, then only one file is processed.
I have tried several incantations. I have replaced that line with a call to a second script; if that
second script contains the call to ffmpeg, then only one file is processed.
The complete script is this (simplified for testing purposes):
#!/bin/bash
PARAMETROS="-async 1 -t 3 -deinterlace -vcodec libxvid -acodec libmp3lame "
FINALPARAMS=" "
QSCALE=3
COUNT=0
TOTAL=0
while read FILES ; do
# Loop to count the total number of files to process and checks that they exist.
# It also removes the destination.avi file (or ffmpeg stops).
FUENTE="$FILES.mpg"
DESTINO="$FILES.avi"
TOTAL=`expr $TOTAL + 1`
if ! test -f "$FUENTE" ; then
echo " Not found $TOTAL: " $FUENTE
COUNT=`expr $COUNT + 1`
else
if test -f "$DESTINO" ; then
rm $DESTINO
fi
fi
done < $0.lista
# Aborts it one was not found
if test $COUNT -gt 0 ; then
echo "$COUNT files not found."
exit
else
echo "Found $TOTAL files."
fi
echo
TOTAL=0
while read FILES ; do
# procesar los ficheros de cuatro en cuatro (cuatro cores)
FUENTE="$FILES.mpg"
DESTINO="$FILES.avi"
TOTAL=`expr $TOTAL + 1`
# echo "=====> " $COUNT.$TOTAL": " $FUENTE
echo $TOTAL" ===> " ffmpeg -i "$FUENTE" -qscale $QSCALE $PARAMETROS "$DESTINO" $FINALPARAMS
echo
time ffmpeg -i "$FUENTE" -qscale $QSCALE $PARAMETROS "$DESTINO" $FINALPARAMS
echo
echo
done < $0.lista
wait
echo
echo
echo "========== Done a total of " $TOTAL "files"
–
Cheers / Saludos,
Carlos E. R.
(from 11.2 x86_64 “Emerald” at Telcontar)