The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Прекращение цикла, !*! 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, то только один. Чтоза?

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

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

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

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

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

      -c:a libmp3lame

      ffmpeg -encoders

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

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

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

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

    • Прекращение цикла, !*! Ordu, 19:33 , 02-Авг-16 (3)
      >> Но если 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, падла.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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