LINUX.ORG.RU

баш массовая конвертация mkv

 


0

3
find . -iname "*.mkv" | while read x
do
	if [[ ! -f "$x".avi ]]; then
		ffmpeg -i "$x" -y -vcodec mpeg4 -acodec libmp3lame -f avi -sn -g 300 -ac 2 -vtag DX50 -s 720x480 -trellis 1 -mbd 2 -b 1500000 -ab 192000 -ar 44100 "$x".avi;
	fi
done

Но после первого конвертированного файла останавливается. Что не правильно ?

★★★★

Попробуй не через find:

for f in *.mkv; do 
  ffmpeg -i "$x" -y -vcodec mpeg4 -acodec libmp3lame -f avi -sn -g 300 -ac 2 -vtag DX50 -s 720x480 -trellis 1 -mbd 2 -b 1500000 -ab 192000 -ar 44100 "$f".avi;
done
gwinn ★★★★
()
Последнее исправление: gwinn (всего исправлений: 1)
Ответ на: комментарий от bl

Граблей с пробелами в таком случае не будет — глоб раскрывается в список слов по одному на найденный элемент, и они сразу же передаются for-у. Т. е. получаются некие виртуальные кавычки.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

У меня на данном примере всё работает (вместо ffmpeg — touch).

В чём заключается «остановка»? Какая-то ошибка или скрипт просто тихо завершается?

intelfx ★★★★★
()
Ответ на: комментарий от gwinn

а надо рекурсивно по всем сабдирам

bryak ★★★★
() автор топика

здесь можно обойтись одним find (-exec, -execdir)

без цикла while

darktic ★★★
()

find цикл вообще не нужен

ls *.mkv | xargs -n 1 -I @@@ ffmpeg -i @@@ -y -vcodec mpeg4 -acodec libmp3lame -f avi -sn -g 300 -ac 2 -vtag DX50 -s 720x480 -trellis 1 -mbd 2 -b 1500000 -ab 192000 -ar 44100 @@@.avi

arson ★★★★★
()
Последнее исправление: arson (всего исправлений: 1)

Но после первого конвертированного файла останавливается. Что не правильно ?

Попробуй (я не уверен на 100%) добавить ffmpeg'y </dev/null

ffmpeg -i "$x" -y -vcodec mpeg4 ....... < /dev/null
sdio ★★★★★
()

Проверьте кто-нибудь этот способ

ffmpeg -i "$x" -y -vcodec mpeg4 ....... < /dev/null
А то я уже на другом яп скрипт накатал. А этот тред надо закрыть с пометкой «решено»

bryak ★★★★
() автор топика
for f in *mkv; do
ffmpeg -i "$f" -y -vcodec mpeg4 -acodec libmp3lame -f avi -sn -g 300 -ac 2 -vtag DX50 -s 720x480 -trellis 1 -mbd 2 -b 1500000 -ab 192000 -ar 44100 "$f".avi;
done
amazpyel ★★★
()
Ответ на: комментарий от sdio

только прочитал заголовок и описание, виноват.

amazpyel ★★★
()

if [[ ! -f «$x».avi ]]

WTF?

Если ты хотел проверить, что это регулярный файл, то

[ -f "${x}.avi" ]

вот тебе рабочий пример:

while read x; do
  echo "$x  ${x/mkv/avi}"
done< <(find -iname "*.mkv")
emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.