The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"Прекращение цикла"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Прекращение цикла"  +/
Сообщение от Ordu email(ok) on 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, то только один. Чтоза?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Прекращение цикла"  +/
Сообщение от _ (??) on 02-Авг-16, 18:41 
> Но если ffmpeg, то только один. Чтоза?

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

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

-c:a libmp3lame

ffmpeg -encoders

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

3. "Прекращение цикла"  +/
Сообщение от Ordu email(ok) on 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, падла.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Прекращение цикла"  +1 +/
Сообщение от Ordu email(ok) on 02-Авг-16, 19:34 
Да! Добавление к вызову ffmpeg перенаправления </dev/zero решает все проблемы. Вот ё. Хрен догадаешься.
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру