[MEGOLDVA] BASH script tobb film enkodolasara

Fórumok

Voltakeppen mencoder/ffmpeg : az egyiknel ha meghivom scriptbol oke, masiknal nem.

UPDATE: koszonom, ffmpeg "-nostdin" kapcsoloja volt a megoldas.
(Csak most tudtam kirpobalni)

Hozzászólások

Volt egy ilyen kis scriptem


#!/bin/bash
mkdir AVI
while read
do
rm frameno.avi
rm divx2pass.log
c=$(echo $REPLY | awk '{print $1}')
v=$(echo $REPLY | awk '{print $2}')
a=$(echo $REPLY | awk '{print $3}')
nice -n +5 mencoder $c -mc 0 -oac mp3lame -ovc frameno -o frameno.avi -lameopts cbr:br=$a 1> $c.0.log 2>&1
echo "$c 0. menet kesz" >> code.log
nice -n +5 mencoder $c -oac copy -mc 0 -ovc xvid -o AVI/$c -xvidencopts bitrate=$v:pass=1 1> $c.1.log 2>&1
echo "$c 1. menet kesz" >> code.log
nice -n +5 mencoder $c -oac copy -mc 0 -ovc xvid -o AVI/$c -xvidencopts bitrate=$v:pass=2 1> $c.2.log 2>&1
echo "$c 2. menet kesz" >> code.log
done < bitrate.avi.log
exit 0

Gyonyoruen mukodott, amig az mencoder jo volt (csomagbol rakva nem lepett ki a kodolas vegen, CTRL-C kellett neki, leforditottam, erre leszarja, hogy milyen bitratat allitok be neki, eldonti. Igy aztan 900 helyett csinal pl. 400-as bitrataval nezhetetlen filmet)

while read / done < filenev segitsegevel soronkent olvasta be, a fileban fel volt sorolva, hogy
cim video_br audio_br
Mukodott.

Mencoder hulyesegei utan megprobtalm ffmpeg-gel


mkdir AVI2
while read
do
rm ffmpeg2pass-0.log
c=$(echo $REPLY | awk '{print $1}')
v=$(echo $REPLY | awk '{print $2}')
a=$(echo $REPLY | awk '{print $3}')
ffmpeg -i $c -b:v $v"k" -vcodec libxvid -pass 1 -an -f rawvideo -y /dev/null > $c"_1.log" 2>&1
echo "elso kor error:" $?
ffmpeg -i $c -b:v $v"k" -vcodec libxvid -acodec libmp3lame -ab $a"k" -pass 2 -f avi AVI2/$c.avi > $c"_2.log" 2>&1
echo "ketto kor error:" $?
echo $c kesz
sleep 60
echo "jon a kovetkezo"
done < bitrate.avi.log

Es ennyi. Csak egyetlen filet csinal meg. Azt szepen, de nem megy a kovetkezore. Mindket pass-ban nulla az error, tgehat nem az ffmpeg hal meg. Csak egyszeruen nem csinalja a kovetkezo filmet.

Otlet? (Eleg sokszor hasznalom a fenti while read; do; done < file strukturat, meg sose volt ilyen gondom, ez az elso es egyszeruen nem ertem)
--
http://www.micros~1

a ffmpeg benyeli az stdin-ről a sorokat, amit a 'while read'-nek kéne.
próbald ki


  ffmpeg paraméterek </dev/null >log 2>&1

átirányításokkal!

és ha már idézőjelezést használsz konstansokhoz ("_1.log", "k"), akkor a változót is tedd idézőjelbe mert igazán csak annak kell az idézőjel (ami egyben tartja IFS esetén).

tehát pl


 ... > "${c}_1.log"
 ... -b:v "${v}k" ...

(bash máshogy token-izál, mint az alacsonyszintű nyelvek, ő nem tudja hogy mi változó és konstans, csak behelyettesít)

~~~~~~~~
deb http://deb.metaltux.tk/ wheezy yazzy repack

Ó, ezt én is megszívtam, erre tudom a választ, azt hiszem. Mindjárt kikeresem a manualban, addig légy türelemmel. Amúgy valami olyasmi lesz, hogy az ffmpeg vár az stdin-ről valamit, és megeszi a read elől a fileneveidet, de ezt ki lehet kapcsolni nála.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE