Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Скрипт, скармливающий файлы Mplayer в slave режиме.  (Прочитано 1331 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн andrew_shtein

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Помогите, кто чем может.
Собственно нужен скрипт, который бы смотрел в определённую папку, брал бы оттуда список файлов, и скармливал бы их Mplayer'у (он в slave-mode) по одному.
Как я понимаю, надо считать весь список файлов в массив, затем проверять, идёт ли воспроизведение, и если закончился один файл, то скармливать следующий. По окончании списка, повторить операцию с начала.
Но вот на написание у меня маны не хватает.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net

Оффлайн andrew_shtein

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Нет, там чувак пишет про то, как сделать вывод команды find в текстовый файл, а затем скормить это mplayer.

Вобщем приведу пример скрипта, и укажу моменты, которые осталось доделать, может так будет яснее.
#!/bin/bash
mkfifo /tmp/mplayer.pipe
mplayer -msglevel all=0 -quiet -zoom -vo xv -fixed-vo -ao null -idle -slave -input file=/tmp/mplayer.pipe &
while [ 1 ].
do
i=1
#Хотелось бы избавиться от нижеследующего темпового файла, и забивать всё сразу в массив
find /home/shtein/video/*.mp4|sort -R > /tmp/playlist
plcount=$(wc -l /tmp/playlist|sed -e 's/[^0-9]//g')
while [ $i -le $plcount ]
do
pfile=$(sed -n "$i p" /tmp/playlist)
echo "loadfile $pfile" > /tmp/mplayer.pipe
#
#Здесь должен быть цикл, проверяющий, не закончился ли файл.
#
let i+=1
sleep 1;
done
sleep 1;
done

В комментариях в коде указаны хотелки:
1) Заменить темповый файл на массив (не обязательно)
2) Сделать цикл, проверяющий, не закончилось ли проигрывание файла, если да - то запускать следующий файл

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Wars ~.o

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
там чувак пишет про то, как сделать вывод команды find в текстовый файл, а затем скормить это mplayer.
Не совсем так.
Там вывод команды напрямую (без промежуточных файлов) подставляется в качестве аргумента для опции плейлиста.
Таким образом, теоретически, можно передать плееру любую последовательность файлов, ведь вместо find можно использовать какую угодно команду или набор команд.
« Последнее редактирование: 20 Мая 2013, 08:25:11 от ArcFi »

Оффлайн andrew_shtein

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Там вывод команды напрямую (без промежуточных файлов) подставляется в качестве аргумента для опции плейлиста.
Таким образом, теоретически, можно передать плееру любую последовательность файлов, ведь вместо find можно использовать какую угодно команду или набор команд.
Попробую переварить на досуге.

Вобщем пока что сделал так:
#!/bin/bash
video_dir_arg="/home/shtein/video/*.mp4"
mkfifo /tmp/mplayer.pipe
mkfifo /tmp/pipe
mplayer -msglevel all=0:statusline=0:global=6 -really-quiet -fs -zoom -vo xv -fixed-vo -ao null -idle -slave -input file=/tmp/mplayer.pipe|sed -u "/EOF/!d;s/\(EOF*\).*/\1/" > /tmp/pipe &

while [ 1 ]
do
ic=1
find $video_dir_arg|sort -R > /tmp/playlist
plcount=$(wc -l /tmp/playlist|sed -e 's/[^0-9]//g')
while [ $ic -le $plcount ]
do
pfile=$(sed -n "$ic p" /tmp/playlist)
echo "loadfile '$pfile'" > /tmp/mplayer.pipe
mdate=$(date +%d-%m-%Y\ %H:%M:%S);
echo $mdate $pfile >> /tmp/video.log
while read line;
do
if [ $line = "EOF" ];
then
break
fi
break
done < /tmp/pipe
let ic+=1
done
sleep 1
done
В принципе, скрипт делает всё, что от него ожидалось, но опять же таки хотелось бы вместо временного файла плейлиста использовать массив данных. Ну и добавить некое подобие отказоустойчивости (например при удалении файла, который должен был воспроизвестись).
« Последнее редактирование: 20 Мая 2013, 17:16:55 от andrew_shtein »

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
кадры конец кто будет?
Wars ~.o

Оффлайн andrew_shtein

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
кадры конец кто будет?
Что, простите?

 

Страница сгенерирована за 0.039 секунд. Запросов: 25.