On Mon, Nov 15, 2010 at 03:43:58PM +0100, Ivo wrote: > On 11/15/2010 08:50 AM, Peter Pentchev wrote: > >On Mon, Nov 15, 2010 at 09:29:40AM +0200, Svetlin Nakov wrote: > >>Колеги, > >> > >>Някой знае ли софтуер, който може да конвертира в batch режим множество > >>видеофайлове от MPEG2 формат (от Mini-DV камера с PCM звук) към > >>по-цивилизован формат, примерно XVid+AC3? > >По принцип всеки софтуер, който може да бъде пуснат от команден ред и > >да прекодира един файл, може да бъде убеден да прекодира повече от един > >файл със shell script или batch файл (в зависимост от операционната > >система ;). Например с mencoder можеш да направиш нещо като: > > > >for i in *.mpg; do > > mencoder ...options... "$i" -o ../converted/"$i" > >done > > > >...или, ако файловете ти са в повече от една директория: > > > >for i in `find . -type f -name '*.mpg'`; do > > d=`dirname "$i"` > > mkdir -p ../converted/"$d" > > mencoder ...options... "$i" -o ../converted/"$i" > >done > > > >А иначе самото прекодиране би трябвало да може да бъде направени или > >с mencoder (от MPlayer), или с vlc, а сигурно има и други. > > Здравейте, > Много ми хареса употребата на глагола убеждавам по-долу. > А моят въпрос е свързна с баш циклите. Доста често убеждавам > програми да свършат работа по много файлове с while, но пък доста > често виждам примери с for. > Да не би да има някаква врътка, която не знам?
В интерес на истината, употребата на for в случая е малко опасна, ако човек не се е погрижил за IFS - файлове с интервали в имената може да създадат интересни и шашави проблеми (добре де, да не бъдат обработени правилно, че даже и изобщо, и да плюят съобщения за грешки наляво-надясно). Ако говориш за употреба на while като: find ... | while read f; do ...; done ...това е нещо, което и аз всъщност правя доста често, до голяма степен именно заради малко по-сигурния начин на обработка на файлове с интервали в имената (и се надявам да не попадна на едеотин, който да е сложил символ за нов ред в името на файла). Основният недостатък на list-generator | while read f; do ... done е, че когато цикълът седи от дясната страна на pipe, той се изпълнява в subshell и не може да променя стойности на променливи в "истинския" шел. Това, разбира се, може да бъде заобиколено с нещо като: tempfile=`mktemp foo.XXXXXX` trap "rm -f -- \"$tempfile\"" EXIT HUP INT QUIT TERM find ... > "$tempfile" while read f; do ...; done < "$tempfile" ...но това се пише малко по-трудно ;) Като цяло, всеки от вариантите си има предимства и недостатъци. Поздрави, Петър -- Peter Pentchev [email protected] [email protected] [email protected] PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553 If there were no counterfactuals, this sentence would not have been paradoxical.
signature.asc
Description: Digital signature
_______________________________________________ Lug-bg mailing list [email protected] http://linux-bulgaria.org/mailman/listinfo/lug-bg
