Ниже однострочник, чья идея в том, чтобы взять два случайных файла из текущей директории, и скопировать их в другое место, параллельно перекодировав им звук. Вообще он мне нужен, чтобы закинуть на планшет и посмотреть в ванной пару случайных серий любимого сериала. При этом планшет не дружит с той звуковой дорожкой, которая есть, поэтому я перекодирую в 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, то только один. Чтоза?
> Но если ffmpeg, то только один. Чтоза?ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....
>> Но если ffmpeg, то только один. Чтоза?
> ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....угу, тоже самое подумал, тестить за ОПа лень,
нет такого _энкодера_ mp3
-c:a libmp3lame
ffmpeg -encoders
>>> Но если ffmpeg, то только один. Чтоза?
>> ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....
> угу, тоже самое подумал, тестить за ОПа лень,
> нет такого _энкодера_ mp3
> -c:a libmp3lame
> ffmpeg -encodersУ тебя ffmpeg неправильный. У меня есть такой энкодер. И я прямо сказал, что один вызов ffmpeg отрабатывает на ура. Что тебе ещё надо?
>>>> Но если ffmpeg, то только один. Чтоза?
>>> ffmpeg вываливается с ошибкой? Ты же один фиг не контролируешь ....
>> угу, тоже самое подумал, тестить за ОПа лень,
>> нет такого _энкодера_ mp3
>> -c:a libmp3lame
>> ffmpeg -encoders
> У тебя ffmpeg неправильный. У меня есть такой энкодер. И я прямо
> сказал, что один вызов ffmpeg отрабатывает на ура. Что тебе ещё
> надо?ему ничего не надо,
это тебе дебилу надо,
у меня ffmpeg из гита недельной давности и тоже нет mp3, есть libmp3lame,
а у тебя старьё, может ваще у тебя не ffmpeg а гнилой avconv
>> Но если 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, падла.
Да! Добавление к вызову ffmpeg перенаправления </dev/zero решает все проблемы. Вот ё. Хрен догадаешься.