LINUX.ORG.RU

Linuxway и mplayer


0

0

Можно ли из mplayer при просмотре как-то (хоткеем или иначе) дёрнуть в интересующий момент внешнюю программу с передачей ей просматриваемого фильма и позиции в нём. Например, чтобы организовать закладки с возможность потом мгновенного доступа к нужному фрагменту фильма. Или запоминать позицию в файле при выходе. И т.п.

★★★★★

я когда впервые поставил mplayer сразу обратил внимание на его очень подробный и красивый мануал. он помог мне, еще сосвсем вантузятнику посмотреть кино пока иксы компилялись (генту). посмотри в ман, там много интересного.

anonymous
()
Ответ на: комментарий от anonymous

Естественно, что я его ман давно и не раз читал. Возможно, конечно, что-то упустил, ибо он большой, но интересующей меня информации я там не видел :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

mplayer выводит в консоль некоторую статистику при воспроизведении, там есть нечто похожее на количество проигранных кадров:

A: 1.3 V: 1.3 A-V: 0.011 ct: 0.064 34/ 34 19% 4% 1.3% 1 0

Число 34/34. Его можно запоминать каким-либо скриптом, но это на случай отсутствия другого решения.

wfrr ★★☆
()
Ответ на: комментарий от anonymous

>Что касается "запоминать позицию в файле при выходе"

Это не самое главное :) Как я уже заметил, мне важен сам факт интеграции mplayer с окружением. Сабж.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от wfrr

>mplayer выводит в консоль некоторую статистику при воспроизведении

В случае mp3 - это так. В случе видео - нет.

>Число 34/34

Что такое 34 кадра. Чуть больше секунды :) Это другое...

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Уважаемый, я понимаю, но все-таки столило глянуть туда, в частности вот вам цитата с офсайта:

> MPlayer has several commands that you can send to LIRC, one of them is 'get_time_pos' which will tell you the playback position of your media file. The script simply captures that output and saves it for each file you play in a directory.

Вдруг этого вам хватит...

anonymous
()
Ответ на: комментарий от wfrr

Попробуйте использовать -v тогда он выводит больше информации:

A: 8.3 V: 8.3 A-V: 0.009 ct: 0.066 208/208 7% 1% 1.3% 1 0

wfrr ★★☆
()
Ответ на: комментарий от anonymous

>Уважаемый, я понимаю, но все-таки столило глянуть туда, в частности вот вам цитата с офсайта:

Можно узнать, где это? В документации, русской и английской, подстроки "get_time_pos" просто нет, в man'е - тоже. Гугль подстроку "MPlayer has several commands" просто не находит.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

В общем, вывод этой метки я получил. Теперь никак не могу понять, как её выцепить. Конструкции, типа:

$ mplayer Znaki.2002.DUAL.DVDRip.XviD.AC3.-HQ-ViDEO.avi | grep ANS_TIME_POSITION | xargs echo

или

... | perl -ne 'print "Store position $_\n";'

не работают :-/

KRoN73 ★★★★★
() автор топика

Обратите внимание на smplayer - возможно это именно то, что вас интересует.

Я остался очень доволен smplayer. Особенно прадовало то, что статусбар и менюбар можно отключить, тем самым приведя внешний вид к привычному mplayer.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

>Обратите внимание на smplayer - возможно это именно то, что вас интересует.

Он у меня установлен. Но интересует, повторюсь, привязка к системе.

Что в данный момент охота - возможность делать автономные сторонние закладки. Т.е. в каталоге с фильмом валяются текстовые файлы (с превьюшками, все дела) с временно́й меткой, клик по которым автоматом запустит прогрыватель для "большого" файла с указанной в файле-метке позиции.

Соответственно, в плейере хочется иметь возможность одним кликом сбросить такой файл.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

По ссылке оказался PHP:

	// Execute the command, save output to an array
	exec($exec, $arr);

	// If the file didn't even exist, mplayer will die, and so will me
	if(!file_exists($movie)) {
		fwrite(STDERR, "mplayer-resume: Couldn't find the filename $movie\n");
		die;
	}

	// Grep out the details we need from output
	$key_position = current(preg_grep('/^ANS_TIME_POSITION\b/', $arr));
	$key_filename = current(preg_grep('/^ANS_FILENAME\b/', $arr));

CtrlAltBs
()
Ответ на: комментарий от CtrlAltBs

Так вот оно как замечательно!

Keyboard:

Map a key with ~/.mplayer/input.conf to run 'get_time_pos'

Sample entry:

g get_time_pos

When you want to save the position, hit 'g', and then 'q' to quit playback.

CtrlAltBs
()
Ответ на: комментарий от KRoN73

Все что нужно - имеется. Нужно лишь чуток подправить скрипт. Вместо файла текстового предлагаю хранить позицию в названии файла аля Название_фильма#позиция.чтото.jpg. Тоесть после exec в том скрипте прописать сохранение картинок с определенной позиции. Ну и начало скрипта чуть переделать что б он распознавал *.чтото.jpg. У картинок ещё комментарии могут быть, туда можно ещё чего запихать (к примеру полный путь к файлу, уровень звука и т.д.). Но как с картинками работать я не знаю.

Самому лениво. Но если реализуете - ждем анонса.

CtrlAltBs
()
Ответ на: комментарий от KRoN73

>Конструкции, типа: >$ mplayer Znaki.2002.DUAL.DVDRip.XviD.AC3.-HQ-ViDEO.avi | grep ANS_TIME_POSITION | xargs echo

А если он на stderr это выводит?

Deleted
()
Ответ на: комментарий от Deleted

>А если он на stderr это выводит?

stdout. Если оставить последним только grep, то грепается всё отлично.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Ну значит это буферизация ввода/вывода.
Добавьте опцию -quiet, чтобы не было лишней информации, при выходе из mplayer'а xargs и отработает.

А вот повесить на одну кнопку две команды get_time_pos и quit похоже нельзя...

file=Znaki.2002.DUAL.DVDRip.XviD.AC3.-HQ-ViDEO.avi; i=0;
mplayer -quiet $file | while read A B; do
 if [[ $A == ANS_TIME_POSITION* ]] ; then
   echo "mplayer -ss ${A#ANS_TIME_POSITION=} $file" > mark.$i
   i=$(( i + 1 ))
 fi
done

mky ★★★★★
()
Ответ на: комментарий от KRoN73

> Гугль подстроку "MPlayer has several commands" просто не находит.

> Результаты 1 - 10 из примерно 34 700 для mplayer has several commands. (0,27 секунд)

У нас разный гугл...? :)

boombick ★★★★★
()
Ответ на: комментарий от mky

Можно обойти.
man mplayer
-slave (also see -input)
Switches on slave mode, in which MPlayer works as a backend for other programs. Instead of intercepting keyboard events, MPlayer will read commands separated by a newline (\n) from stdin.

Т.е. нужно отправлять mplayer команды. Можете сами попробовать набрать к примеру quit. Соответственно взять какую нибудь бесполезную команду (коя ничего плохого не делает), повесить её на кнопку q. При нажатии в stdout будет появляться ответ этой команды. Как только она у нас - останется послать get_time\nquit.

Естественно, нужна двунаправленная работа с процессом. На shell это возможно?

CtrlAltBs
()
Ответ на: комментарий от KRoN73

> | perl -ne 'print "Store position $_\n";'

не stdin, а stderr?

anonymous
()
Ответ на: комментарий от CtrlAltBs

Ваша идея работает только в X-ах, при условии, что активно окно видеовывода mplayer'а. В консоли (framebuffer) или при воспроизведении аудио в X-ах, в режиме -slave, когда stdin mplayer'а занят другим приложением, он не получает события нажатия клавиш.

То есть, запускаем, допустим так:

( sleep 20 ; echo get_time_pos; echo quit ) | mplayer video.avi -quiet -slave

Если в X-ах, то при нажатии клавиши q, mplayer выходит, а если в консолии, то q жать бесполезно. Поэтому здесь придется в приложении, которое управляет mplayer, обрабатывать все клавиши и передавать в mplayer соответствующие команды. Наверное, проще поковырять исходники mplayer и сделать возможным несколько команд по одной клавише.

mky ★★★★★
()
Ответ на: комментарий от mky

Про аудио и фреймбуфер речи не шло. Первое - можно для аудио запускать с обычными параметрами, второе - для больных красноглазием.

CtrlAltBs
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.