URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10111
[ Назад ]

Исходное сообщение
"Прекращение цикла"

Отправлено Ordu , 02-Авг-16 15:17 
Ниже однострочник, чья идея в том, чтобы взять два случайных файла из текущей директории, и скопировать их в другое место, параллельно перекодировав им звук. Вообще он мне нужен, чтобы закинуть на планшет и посмотреть в ванной пару случайных серий любимого сериала. При этом планшет не дружит с той звуковой дорожкой, которая есть, поэтому я перекодирую в mp3. Ну и естественно хотелось бы перекодировать и копировать параллельно, для экономии времени. Здесь в команде в качестве цели указана ./tmp/, но это просто я устранял возможные источники влияния.

Собственно, проблема в том, что он только один файл "копирует" -- первый.

ls *.mkv | shuf | head -n 2 | sort | (i=1; while read line; do ffmpeg -i "$line" -c:v copy -c:a mp3 tmp/$((i++)).mkv; done )

Если заменить ffmpeg на echo ffmpeg то он две строчки. Если всю команду в теле цикла на cp "$line" tmp/$((i++)).mkv, то тоже всё срабатывает как я ожидаю -- два случайных файла копируются с переименованием в 0.mkv, 1.mkv. Но если ffmpeg, то только один. Чтоза?


Содержание

Сообщения в этом обсуждении
"Прекращение цикла"
Отправлено _ , 02-Авг-16 18:41 
> Но если ffmpeg, то только один. Чтоза?

ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....


"Прекращение цикла"
Отправлено omnomnim , 02-Авг-16 19:17 
>> Но если ffmpeg, то только один. Чтоза?
> ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....

угу, тоже самое подумал, тестить за ОПа лень,

нет такого _энкодера_ mp3

-c:a libmp3lame

ffmpeg -encoders


"Прекращение цикла"
Отправлено Ordu , 02-Авг-16 19:37 
>>> Но если ffmpeg, то только один. Чтоза?
>> ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....
> угу, тоже самое подумал, тестить за ОПа лень,
> нет такого _энкодера_ mp3
> -c:a libmp3lame
> ffmpeg -encoders

У тебя ffmpeg неправильный. У меня есть такой энкодер. И я прямо сказал, что один вызов ffmpeg отрабатывает на ура. Что тебе ещё надо?


"Прекращение цикла"
Отправлено asavah , 02-Авг-16 20:48 
>>>> Но если ffmpeg, то только один. Чтоза?
>>> ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....
>> угу, тоже самое подумал, тестить за ОПа лень,
>> нет такого _энкодера_ mp3
>> -c:a libmp3lame
>> ffmpeg -encoders
> У тебя ffmpeg неправильный. У меня есть такой энкодер. И я прямо
> сказал, что один вызов ffmpeg отрабатывает на ура. Что тебе ещё
> надо?

ему ничего не надо,
это тебе дебилу надо,
у меня ffmpeg из гита недельной давности и тоже нет mp3, есть libmp3lame,
а у тебя старьё, может ваще у тебя не ffmpeg а гнилой avconv


"Прекращение цикла"
Отправлено Ordu , 02-Авг-16 19:33 
>> Но если ffmpeg, то только один. Чтоза?
> ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....

$ ls *.mkv | shuf | head -n 2 | sort | (i=1; while read line; do ffmpeg -i "$line" -c:v copy -c:a mp3 tmp/$((i++)).mkv>/dev/null 2>/dev/null; echo exit status: $?; done )

exit status: 0


Но... Я добавил вывод $line _в_дополнение_ к вызову ffmpeg, и у меня возник вопрос, а ffmpeg может читать из stdin? Второму вызову ffmpeg достаётся имя файла не полностью. И мне кажется, что чем раньше я тыкну в C-c, чтобы оборвать первый вызов ffmpeg, тем меньше будет обгрызано имя файла для второго вызова. Если же я дожидаюсь окончания перекодирования, то exit status: 0, и цикл заканчивается, как будто в stdin у сабшелла вообще пусто.

Да, если mencoder'ом делать то же самое, оно работает. Всё дело в ffmpeg. Видимо он зачем-то читает из stdin, падла.


"Прекращение цикла"
Отправлено Ordu , 02-Авг-16 19:34 
Да! Добавление к вызову ffmpeg перенаправления </dev/zero решает все проблемы. Вот ё. Хрен догадаешься.