mplayer в консоли, упрощение просмотра видеофайлов в консоли |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
mplayer в консоли, упрощение просмотра видеофайлов в консоли |
Поделиться |
11.1.2018, 20:10
Сообщение
#1
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Включил два ноутбука с дисплеями разных пропорций и достал костыллятор:
Всё что ниже, потенциально предназначено для консольных дистрибутивов повседневного пользовательского уровня с уровнем пользователя от среднего и ниже. А также поиск путей упрощения запуска медиаконтента в консоли. С доведением консольных систем до повседневного использования. Первый скрипт: Воспроизводит все видеофайлы с любыми пропорциями на дисплеях с любыми пропорциями. Формат запуска: Код $ mplayer-vc /путь/к/видеофайлу На дух не переносит пробелов в пути: $@ отдельные куски полного пути разделённые пробелами воспринимает как отдельные параметры и режет бэкслэши. Как справиться с этим не знаю. Листинг скрипта: Код $ cat ~/mplayer-vc #!/bin/bash VIDEOFILE=$(echo "$@") # Разрешение оригинального видеофайла по X VIDEOWIDTH=`mediainfo $VIDEOFILE | grep 'Width' | awk '{printf $3}'` # Разрешение оригинального видеофайла по Y VIDEOHEIGHT=`mediainfo $VIDEOFILE | grep 'Height' | awk '{printf $3}'` # Пропорции изоражения видео в десятичном виде ASPECTMP=`mediainfo $VIDEOFILE | grep 'Display aspect ratio' | rev | awk '{printf $1}' | rev | sed 's/:/\//'` VIDEOASPECT=`echo $ASPECTMP | bc -l | sed 's/^\(......\).*/\1/'` # Пропорции фреймбуфера в десятичном виде FBASPECT=`fbset --test | grep mode | awk -F '"' '{print $2}' | sed 's/x/\//' | bc -l |sed 's/^\(......\).*/\1/'` # Разрешение фреймбуфера по Y в пикселах FBHEIGHT=`fbset --test | grep mode | awk -F '"' '{print $2}' | awk -F 'x' '{printf $2}'` # Если видеофайл с пропорциями 4x3 воспроизводится в widescreen мониторе, то # вычислить коэффициент масштабирования до Y фреймбуфера # и далее использовать этот коэффициент # для получения предела промасштабирования видео по X if [ "$VIDEOASPECT" == 1.3333 -a "$FBASPECT" > 1.3333 ]; then VSIZEXXX=`echo "$FBHEIGHT/$VIDEOHEIGHT" | bc -l` XVSIZE=`echo "$VIDEOWIDTH*$VSIZEXXX" | bc -l` # иначе вычислить X фреймбуфера else XVSIZE=`fbset --test|grep geometry|awk '{print $2}'` fi # пропорционально масштабировать по коэффициенту # до X фреймбуфера, - в переменной XVSIZE setterm --blank 0; mplayer -nocache -softvol -xy $XVSIZE -fs -zoom $VIDEOFILE &>/dev/null XVSIZE (переменная): X - координата V - видео, видеофайл SIZE - размер собственно XVSIZE - размер видео в пикселах в полный экран по координате X Другой вариант этой мысли упрощения просмотра видеофайлов в консоли: Это использовать алиас Код $ ls -l /etc/bashrc.d/mplayer.sh -rwxr-xr-x 1 root root 110 янв 11 18:43 /etc/bashrc.d/mplayer.sh Код $ cat /etc/bashrc.d/mplayer.sh alias mplayer-vofbdev="setterm --blank 0; mplayer -nocache -softvol -xy $(fbset --test|grep geometry|awk '{print $2}') -fs -zoom &>/dev/null" Формат запуска для просмотра видео в консоли Код $ mplayer-vofbdev /путь/к\ какому\ то\ видео\ файлу Достоинства: Промасштабирует видео в плюс или минус до разрешения фреймбуфера. Обрабатывает пробелы в пути. Недостаток: На дух не переваривает воспроизведение видео с пропорциями 4x3 в widescreen мониторе. Суть проблемы: -xy N масштабирует по X до размера фреймбуфера по X и если видео по Y выходит за пределы координаты, mplayer откажется отображать видео. При просмотре видеофайла с пропорцией 4x3 на widescreen мониторе, сначала требуется масштабировать по Y и пропорционально масштабировать по X. Предварительно запросив разрешение и пропорции видеофайла. Такие вот невесёлые пирожки с котятами... Сообщение отредактировал speccyfighter - 12.1.2018, 11:50 |
|
|
12.1.2018, 8:41
Сообщение
#2
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Юра, может из первого скрипта собрать пакет, чтобы он лежал в /usr/bin ? Я могу конечно сунуть его в скелетон и заодно костыльнуть в root-овский хомяк , но пакетом лучше. Фиг с ними с пробелами , как у него с кириллицей в путях ?
Альяс с mplayer-ом могу закостылить прямо в сборку. |
|
|
12.1.2018, 11:32
Сообщение
#3
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Фиг с ними с пробелами , как у него с кириллицей в путях ? Кириллицу проглатывает на ура. В скрипте: - Убраны отладочные echo; - В строку запуска добавлено отключение затемнения экрана; - В строку запуска добавлено отключение кеша: По какой-то причине, если кеш не отключен, при воспроизведении видеопотока, через небольшое время воспроизведение прерывается. При текущем скрипте, имеется возможность воспроизведения видеопотока: Код $ mplayer-vc -playlist /path/videodtream.pls где videostream.pls плэйлист с полным http адресом на видеофайл. Остаётся только выуживать прямой линк на видеофайл. Количество опций сокращается до минимума: По наличию/отсутствию опции -playlist Юра, может из первого скрипта собрать пакет, чтобы он лежал в /usr/bin ? Я могу конечно сунуть его в скелетон и заодно костыльнуть в root-овский хомяк , но пакетом лучше. Альяс с mplayer-ом могу закостылить прямо в сборку. Ну и хорошо, тогда так и делаем.. Для первого скрипта требуется обязательная зависимость на пакет mediainfo: Для анализа свойств видеофайла: X+Y+aspect (пропорции). Обязательные зависимости для первого скрипта: Код $ rpm -qf $(which mediainfo) mediainfo-17.12-alt1.i586 Код $ rpm -qf $(which sed) sed-4.4.0.10.0580-alt1.i586 Код $ rpm -qf $(which awk) gawk-4.1.0-alt2.i586 Код $ rpm -qf $(which grep) grep-3.0.0.12.e2b7-alt1.i586 Код $ rpm -qf $(which echo) coreutils-8.27.0.23.f4570-alt1.i586 Код $ rpm -qf $(which rev) util-linux-2.30.2-alt1.i586 Код $ rpm -qf $(which setterm) util-linux-2.30.2-alt1.i586 Код $ rpm -qf $(which fbset) fbset-2.1-alt2.i586 Код $ rpm -qf $(which mplayer)
mplayer-1.3.0-alt1.i586 Сообщение отредактировал speccyfighter - 12.1.2018, 17:17 |
|
|
12.1.2018, 20:48
Сообщение
#4
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Юра, пакет я собрал, проверил и залил в p8 32-бита:
http://altlinuxclub.ru/repo/Repo_P8/SRPMS.....1-alt1.src.rpm Все дальнейшие перепакечивания и изменения этого пакета на тебе как на авторе , будешь заодно и его мантейнером Пакет я сделал простенький - дальше при необходимости добавишь все что надо. Сборочные зависимости добавлены через buildreq -bi , поэтому для p7 не собирается - не хватает 3-ей питонщины ( она по-моему там нафиг не нужна ). Если хочешь видеть в 7-ой репе ,то достаточно либо сделать под 7-кой buildreq , либо поправить сборочные зависимости вручную. В общем ты хозяин пакета - тебе решать. Видео показывает отлично, будет в следующей сборке консольного минимала PS Потихоньку душу удава, процесс идет |
|
|
13.1.2018, 9:50
Сообщение
#5
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Юра, пакет я собрал, проверил и залил в p8 32-бита: http://altlinuxclub.ru/repo/Repo_P8/SRPMS.....1-alt1.src.rpm Все дальнейшие перепакечивания и изменения этого пакета на тебе как на авторе , будешь заодно и его мантейнером Пакет я сделал простенький - дальше при необходимости добавишь все что надо. Сборочные зависимости добавлены через buildreq -bi , поэтому для p7 не собирается - не хватает 3-ей питонщины ( она по-моему там нафиг не нужна ). Если хочешь видеть в 7-ой репе ,то достаточно либо сделать под 7-кой buildreq , либо поправить сборочные зависимости вручную. В общем ты хозяин пакета - тебе решать. Видео показывает отлично, будет в следующей сборке консольного минимала OK PS Потихоньку душу удава, процесс идет Это хорошо |
|
|
13.1.2018, 10:19
Сообщение
#6
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Ничему и никому не доверяй. Доверяй только терминалу. Вот гадство. Даже при фреймбуфере 4x3 наткнулся на ролик с отказом отображеия видео: Редкий случай, но чинить надо Код mplayer -nocache -softvol -xy 1024 -fs -zoom 2>./4x3-aspect-incorrect.txt ./film.3gp vo: couldn't open the X11 display ()! [VO_SDL] SDL initialization failed: Unable to open mouse. vo: couldn't open the X11 display ()! vo: couldn't open the X11 display ()! vo: couldn't open the X11 display ()! [AO_ALSA] alsa-lib: pcm_hw.c:1695:(snd_pcm_hw_open) open '/dev/snd/pcmC0D0p' failed (-77): File descriptor in bad state [fbdev2] Screensize is smaller than video size (1024x768 < 1024x772) FATAL: Cannot initialize video driver. ... [fbdev2] Screensize is smaller than video size (1024x768 < 1024x772) FATAL: Cannot initialize video driver. Too many buffered pts ... MPlayer interrupted by signal 2 in module: decode video [fbdev2] Screensize is smaller than video size (1024x768 < 1024x772) FATAL: Cannot initialize video driver. [fbdev2] Screensize is smaller than video size (1024x768 < 1024x772) FATAL: Cannot initialize video driver. Too many buffered pts ... MPlayer interrupted by signal 2 in module: decode video aspect говорит что это 4:3 Код mediainfo ./film.3gp | grep Wid|Heigh|aspect Width : 318 pixels Height : 240 pixels Display aspect ratio : 4:3 А вот хрен там, если пересчитать Width и Height Ни разу это не 4:3 Код echo '318/240'|bc -l 1.32500000000000000000 При масшабировании по X фреймбуфера (-xy N), ролик не влезет в рамки Y фреймбуфера и mplayer откажется отображать видео, а думал что это коснётся только widescreen мониторов. А вот хрен: Код fbset --test mode "1024x768" geometry 1024 768 1024 768 32 timings 0 0 0 0 0 0 0 rgba 8/16,8/8,8/0,8/24 endmode Код echo 1024/768|bc -l 1.33333333333333333333 Пришлось менять алгоритм анализа пропорций фреймбуфера и видео по реальным X и Y фильма и фреймбуфера. И изменить комментарий к условию. Также добавлена опция -framedrop Изменённый скрипт: Код $ cat /home/user/mplayer-vc
#!/bin/bash VIDEOFILE=$(echo "$@") # Разрешение оригинального видеофайла по X VIDEOWIDTH=`mediainfo $VIDEOFILE | grep 'Width' | awk '{printf $3}'` # Разрешение оригинального видеофайла по Y VIDEOHEIGHT=`mediainfo $VIDEOFILE | grep 'Height' | awk '{printf $3}'` # Пропорции изоражения видео в десятичном виде VIDEOASPECT=`echo "$VIDEOWIDTH/$VIDEOHEIGHT" | bc -l` # Пропорции фреймбуфера в десятичном виде FBASPECT=`fbset --test | grep mode | awk -F '"' '{print $2}' | sed 's/x/\//' | bc -l |sed 's/^\(......\).*/\1/'` # Разрешение фреймбуфера по Y в пикселах FBHEIGHT=`fbset --test | grep mode | awk -F '"' '{print $2}' | awk -F 'x' '{printf $2}'` # Если aspect (пропорции) фреймбуфера больше чем aspect видеофайла, # то вычислить коэффициент масштабирования до Y фреймбуфера, # затем вычислить по коэффициенту максимально допустимый размер # в пикселах при масштабирование видеофайла по X, чтобы при # масштабировании по -xy, видеофайл не выходил за пределы экрана # по координате Y if [[ $FBASPECT > $VIDEOASPECT ]] then VSIZEXXX=`echo "$FBHEIGHT/$VIDEOHEIGHT" | bc -l` XVSIZE=`echo "$VIDEOWIDTH*$VSIZEXXX" | bc -l` # иначе вычислить X фреймбуфера else XVSIZE=`fbset --test|grep geometry|awk '{print $2}'` fi # пропорционально масштабировать по коэффициенту # до X фреймбуфера, - в переменной XVSIZE setterm --blank 0; mplayer -nocache -softvol -xy $XVSIZE -fs -zoom -framedrop $VIDEOFILE &>/dev/null Сообщение отредактировал speccyfighter - 13.1.2018, 10:31 |
|
|
13.1.2018, 11:36
Сообщение
#7
|
|
Профессионал Группа: Активный Пользователь Сообщений: 1143 Регистрация: 10.4.2015 Вставить ник Цитата Пользователь №: 2798 Страна: Казахстан Город: Уральск Пол: Муж. Репутация: 5 |
Мне подождать опакечивание новой версии?
|
|
|
13.1.2018, 11:37
Сообщение
#8
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
|
|
|
13.1.2018, 21:45
Сообщение
#9
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Линукс, ты тупой как пень стоеросовый.
Я из-за тебя обработку ошибок только в 9-том часу вечера закончил, дубина ты. Обработка второго if условия на наличие файла: Код $ cat mplayer-vc-chk-enable-file #!/bin/bash echo $* if [ -z "$*" ] then echo -e "\nUsage: mplayer-vc /path/to/videofile\n" echo -e "The path to the file must not contain spaces\n" exit 0 fi echo $* if [ ! -f "$*" ] then echo -e "\nNo such file\n" exit 0 else echo -e "\nFile enabled\n" exit 0 fi #file $@ &>/dev/null #if [ "$?" != 0 ] # then # echo -e "\nNo such file\n" # exit 0 # else # echo -e "\nFile enabled\n" # exit 0 #fi exit 0 Код mplayer-vc-chk-enable-file ./Хроники\ Риддика.avi &>if2-chk.txt Ну ты и дубина... Ну как же enabled, если путь не обрабатывается, если пробелы не экранированы бэкслешем Код $ cat if2-chk.txt ./Хроники Риддика.avi ./Хроники Риддика.avi File enabled Из-за тебя болвана пришлось изобретать проверку костылём. Смотри как надо и учись: Код $ cat mplayer-vc-chk-enable-file #!/bin/bash echo $* if [ -z "$*" ] then echo -e "\nUsage: mplayer-vc /path/to/videofile\n" echo -e "The path to the file must not contain spaces\n" exit 0 fi echo $* #if [ ! -f "$*" ] # then # echo -e "\nNo such file\n" # exit 0 # else # echo -e "\nFile enabled\n" # exit 0 #fi file $@ &>/dev/null if [ "$?" != 0 ] then echo -e "\nNo such file\n" exit 0 else echo -e "\nFile enabled\n" exit 0 fi exit 0 Код mplayer-vc-chk-enable-file ./Хроники\ Риддика.avi &>if3-chk.txt Код $ cat if3-chk.txt ./Хроники Риддика.avi ./Хроники Риддика.avi ./Хроники: ERROR: cannot open `./Хроники' (No such file or directory) Риддика.avi: ERROR: cannot open `Риддика.avi' (No such file or directory) No such file Ну конечно же No such file: после парсинга в переменную, всего что стоит после команды, поисчезали бэкслэши, а без них полный путь не обрабатывается и должно быть Нет такого файла. И быть его не может. Файл в наличии, пробелов в пути нет: Код $ cat if3-1-chk.txt ./Голубой_Гром.240.mp4 ./Голубой_Гром.240.mp4 ./Голубой_Гром.240.mp4: ISO Media, MPEG v4 system, version 1 File enabled Зря я там выше ляпнул про костыллятор. Нанострдамил на свою голову. Блин, всё бы ничего, но на эти проверки время же тратится, от нажатия Enter до начала проигрывания... А этой фигни не должно быть. Ну никак не должно быть. Сообщение отредактировал speccyfighter - 13.1.2018, 22:05 |
|
|
13.1.2018, 23:55
Сообщение
#10
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Новая версия mplayer-vc-0.2
Изменения в версии 0.2: - Исправлен алгоритм проверки соотношения сторон фреймбуфера и видеофайла - Добавлена опция -framedrop - Добавлен вывод помощи при отсутствии пути к видеофайлу - Добавлена проверка на наличие файла Пакет установлен в систему sysv-xfce и проверен. Сообщение отредактировал speccyfighter - 13.1.2018, 23:58 |
|
|
11.6.2018, 13:36
Сообщение
#11
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Изменён скрипт mplayer-vc
Код $ sdiff -w 230 $HOME/mplayer-vc-new-2.sh $HOME/mplayer-vc/mplayer-vc-0.2/mplayer-vc #!/bin/bash #!/bin/bash echo $* echo $* if [ -z "$*" ] if [ -z "$*" ] then then echo -e "\nUsage: mplayer-vc /path/to/videofile\n" echo -e "\nUsage: mplayer-vc /path/to/videofile\n" echo -e "The path to the file must not contain spaces\n" echo -e "The path to the file must not contain spaces\n" exit 0 exit 0 fi fi file "$*" &>/dev/null | file $* &>/dev/null if [ "$?" != 0 ] if [ "$?" != 0 ] then then echo -e "\nNo such file\n" echo -e "\nNo such file\n" exit 0 exit 0 fi fi VIDEOFILE=$(echo "$*") VIDEOFILE=$(echo "$*") # Разрешение оригинального видеофайла по X # Разрешение оригинального видеофайла по X VIDEOWIDTH=`mediainfo "$VIDEOFILE" | grep 'Width' | awk '{printf $3}'` | VIDEOWIDTH=`mediainfo $VIDEOFILE | grep 'Width' | awk '{printf $3}'` # Разрешение оригинального видеофайла по Y # Разрешение оригинального видеофайла по Y VIDEOHEIGHT=`mediainfo "$VIDEOFILE" | grep 'Height' | awk '{printf $3}'` | VIDEOHEIGHT=`mediainfo $VIDEOFILE | grep 'Height' | awk '{printf $3}'` # Пропорции изоражения видео в десятичном виде # Пропорции изоражения видео в десятичном виде VIDEOASPECT=`echo "$VIDEOWIDTH/$VIDEOHEIGHT" | bc -l` VIDEOASPECT=`echo "$VIDEOWIDTH/$VIDEOHEIGHT" | bc -l` # Пропорции фреймбуфера в десятичном виде # Пропорции фреймбуфера в десятичном виде FBASPECT=`fbset --test | grep mode | awk -F '"' '{print $2}' | sed 's/x/\//' | bc -l |sed 's/^\(......\).*/\1/ FBASPECT=`fbset --test | grep mode | awk -F '"' '{print $2}' | sed 's/x/\//' | bc -l |sed 's/^\(......\).*/\1/ # Разрешение фреймбуфера по Y в пикселах # Разрешение фреймбуфера по Y в пикселах FBHEIGHT=`fbset --test | grep mode | awk -F '"' '{print $2}' | awk -F 'x' '{printf $2}'` FBHEIGHT=`fbset --test | grep mode | awk -F '"' '{print $2}' | awk -F 'x' '{printf $2}'` # Если aspect (пропорции) фреймбуфера больше чем aspect видеофайла, # Если aspect (пропорции) фреймбуфера больше чем aspect видеофайла, # то вычислить коэффициент масштабирования до Y фреймбуфера, # то вычислить коэффициент масштабирования до Y фреймбуфера, # затем вычислить по коэффициенту максимально допустимый размер # затем вычислить по коэффициенту максимально допустимый размер # в пикселах при масштабирование видеофайла по X, чтобы при # в пикселах при масштабирование видеофайла по X, чтобы при # масштабировании по -xy, видеофайл не выходил за пределы экрана # масштабировании по -xy, видеофайл не выходил за пределы экрана # по координате Y # по координате Y if [[ $FBASPECT > $VIDEOASPECT ]] if [[ $FBASPECT > $VIDEOASPECT ]] then then VSIZEXXX=`echo "$FBHEIGHT/$VIDEOHEIGHT" | bc -l` VSIZEXXX=`echo "$FBHEIGHT/$VIDEOHEIGHT" | bc -l` XVSIZE=`echo "$VIDEOWIDTH*$VSIZEXXX" | bc -l` XVSIZE=`echo "$VIDEOWIDTH*$VSIZEXXX" | bc -l` # иначе вычислить X фреймбуфера # иначе вычислить X фреймбуфера else else XVSIZE=`fbset --test|grep geometry|awk '{print $2}'` XVSIZE=`fbset --test|grep geometry|awk '{print $2}'` fi fi # пропорционально масштабировать по коэффициенту # пропорционально масштабировать по коэффициенту # до X фреймбуфера, - в переменной XVSIZE # до X фреймбуфера, - в переменной XVSIZE setterm --blank 0; mplayer -nocache -softvol -xy $XVSIZE -fs -zoom -framedrop "$VIDEOFILE" &>/dev/null | setterm --blank 0; mplayer -nocache -softvol -xy $XVSIZE -fs -zoom -framedrop $VIDEOFILE &>/dev/null Код $ diff $HOME/mplayer-vc-new-2.sh $HOME/mplayer-vc/mplayer-vc-0.2/mplayer-vc 13c13 < file "$*" &>/dev/null --- > file $* &>/dev/null 24c24 < VIDEOWIDTH=`mediainfo "$VIDEOFILE" | grep 'Width' | awk '{printf $3}'` --- > VIDEOWIDTH=`mediainfo $VIDEOFILE | grep 'Width' | awk '{printf $3}'` 26c26 < VIDEOHEIGHT=`mediainfo "$VIDEOFILE" | grep 'Height' | awk '{printf $3}'` --- > VIDEOHEIGHT=`mediainfo $VIDEOFILE | grep 'Height' | awk '{printf $3}'` 54c54 < setterm --blank 0; mplayer -nocache -softvol -xy $XVSIZE -fs -zoom -framedrop "$VIDEOFILE" &>/dev/null --- > setterm --blank 0; mplayer -nocache -softvol -xy $XVSIZE -fs -zoom -framedrop $VIDEOFILE &>/dev/null Теперь mplayer-vc умеет в пути к файлу обрабатывать бэкслэши, экранирующие символы (пробел, восклицательный знак и т.д.) Из окончательного варианта скрипта убрана строка предупреждающая о том, что полный путь к видеофайлу не должен содержать пробелов: Код $ cat $HOME/mplayer-vc-new-2.sh #!/bin/bash echo $* if [ -z "$*" ] then echo -e "\nUsage: mplayer-vc /path/to/videofile\n" exit 0 fi file "$*" &>/dev/null if [ "$?" != 0 ] then echo -e "\nNo such file\n" exit 0 fi VIDEOFILE=$(echo "$*") # Разрешение оригинального видеофайла по X VIDEOWIDTH=`mediainfo "$VIDEOFILE" | grep 'Width' | awk '{printf $3}'` # Разрешение оригинального видеофайла по Y VIDEOHEIGHT=`mediainfo "$VIDEOFILE" | grep 'Height' | awk '{printf $3}'` # Пропорции изоражения видео в десятичном виде VIDEOASPECT=`echo "$VIDEOWIDTH/$VIDEOHEIGHT" | bc -l` # Пропорции фреймбуфера в десятичном виде FBASPECT=`fbset --test | grep mode | awk -F '"' '{print $2}' | sed 's/x/\//' | bc -l |sed 's/^\(......\).*/\1/'` # Разрешение фреймбуфера по Y в пикселах FBHEIGHT=`fbset --test | grep mode | awk -F '"' '{print $2}' | awk -F 'x' '{printf $2}'` # Если aspect (пропорции) фреймбуфера больше чем aspect видеофайла, # то вычислить коэффициент масштабирования до Y фреймбуфера, # затем вычислить по коэффициенту максимально допустимый размер # в пикселах при масштабирование видеофайла по X, чтобы при # масштабировании по -xy, видеофайл не выходил за пределы экрана # по координате Y if [[ $FBASPECT > $VIDEOASPECT ]] then VSIZEXXX=`echo "$FBHEIGHT/$VIDEOHEIGHT" | bc -l` XVSIZE=`echo "$VIDEOWIDTH*$VSIZEXXX" | bc -l` # иначе вычислить X фреймбуфера else XVSIZE=`fbset --test|grep geometry|awk '{print $2}'` fi # пропорционально масштабировать по коэффициенту # до X фреймбуфера, - в переменной XVSIZE setterm --blank 0; mplayer -nocache -softvol -xy $XVSIZE -fs -zoom -framedrop "$VIDEOFILE" &>/dev/null Скрипт воспроизводит только локальные файлы. Алгоритм остался прежним. Скрипт по-прежнему работает и в tty и в X-сах. Скрит проверен на работоспособность с бэклэшами перед пробелами и восклицательным знаком. Однако при запуске в X-сах предупреждает: setterm: terminal xterm does not support --blank Это версия: mplayer-vc-0.2.1 - added processing of backslashes in the path to the file - добавлена обработка бэкслэшей в пути к файлу Оригинальное имя исполняемого файла также остаётся прежним: mplayer-vc vc - своего рода аббревиатура, - видеоконсоль В скрит надо было бы добавить лицензию, но честно говоря, мне лень Теоретически можно было бы добавить расширенный хэлп по этой идее: https://forum.altlinux.org/index.php?topic=...24233#msg324233 но честно говоря, я не знаю зачем это нужно. Поскольку идея скрипта, это максимальное упрощение для пользователя и автоматизация shell по-максимуму. Всё что может выносить мозг пользователю, а это опции и параметры, должно быть убрано в автомат. Идея в том, чтобы донести до пользователя идею и философию ZX Spectrum через bash-скрипт: - shell может быть простым для повседневного использования (в рамках пользовательских задач). Хочется надеяться, что в последней версии скрипта (0.2.1), в должной мере реализован принцип KISS: Keep It Simple Stupid Делай проще тупица Сообщение отредактировал speccyfighter - 11.6.2018, 14:41 |
|
|
11.6.2018, 14:39
Сообщение
#12
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Скрипт проигрывает только локальные файлы.
Но скажем если закомментировать (или как-то переделать) процедуру проверки наличия файла, то скрипт хоть и сыпет ошибками, но умудряется проигрывать и видеопоток, с прямым линком в файле, в котором лежит прямая http-ссылка на видеофайл: Пример воспроизведения видеопотока через mplayer-vc-0.2.1 с закомментированной процедурой проверки наличия видеофайла: Код $HOME/mplayer-vc-new-2.sh $(<$HOME/video-url.txt) Сам прямой линк содержащийся в файле video-url.txt, по понятнім причинам не приводится. В теории процедуру проверки наличия файла можно было бы просто закомментировать, но тогда при отсутствии файла, будет вываливаться ошибка малопонятная пользователю. И это может его шокировать. |
|
|
12.6.2018, 14:23
Сообщение
#13
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Окончательный вариант скрипта mplayer-vc v0.2.1
Изменения: - добавлена лицензия - изменено содержание и метод вывода help - добавлен комментарий к процедуре проверки наличия файла - добавлена обработка бэкслэшей в полном пути к видеофайлу (допускает экранирование бэкслэшэм символов в пути к видеофайлу, таких как пробел, скобки и т.д.) Субъективно: Теперь скрипт достоин чтобы войти в любой репозиторий. После сборки пакета новой версии, консольный образ live-sysv рекомендуется обновить. Сообщение отредактировал speccyfighter - 12.6.2018, 14:27 |
|
|
12.6.2018, 20:45
Сообщение
#14
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
После сборки пакета новой версии, консольный образ live-sysv рекомендуется обновить. Обновлю, только давай подумаем что еще добавить / изменить в live-sysv , только в этой теме : http://forum.russ2.com/index.php?showtopic...amp;#entry50178 |
|
|
28.10.2019, 22:08
Сообщение
#15
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
mplayer-vc (Movie Player for Virtual Console) для IceArch
Единственное отличие этой версии скрипта от версии для ALT Linux: Судя по всему, mplayer для archlinux не умеет обнаруживать единственно доступное устройство вывода видео. Поэтому в последней строке скрипта, использование опции '-vo fbdev2' обязательно. Без этой опции/параметра скрипт в арче не отработает и завершится без вывода ошибок. С этой же опцией скрипт может использоваться и для ALT Linux, но впрочем это необязательно. Скрипт обкатывался на кард-ридере в IceArch-0.984-x86_64.iso Код [arch<>archiso ~]$ ls /media/ IceArch_0.984 на клипах Код [arch<>archiso ~]$ find ./clips/ -name "Trace*" -o -name "Alan*" ./clips/Country-video/Trace Adkins - Just Fishin'-IheODRwalEw.3gp ./clips/Country-video/Trace Adkins - Just Fishin'-IheODRwalEw.mp4 ./clips/Country-video/Trace Adkins - You're Gonna Miss This-lBDN8yWyNYU.3gp ./clips/Country-video/Trace Adkins - You're Gonna Miss This-lBDN8yWyNYU.mp4 ./clips/Country-video/Alan Jackson, Jimmy Buffett - It's Five O' Clock Somewhere-BPCjC543llU.3gp В ледяном арче потребовалась установка дополнительных пакетов fbset и mediainfo, а также добавление непревилегированного пользователя в группу video. Наличие исполняемых файлов file grep echo awk sed setterm для работы скрипта также обязательно. Комментарии в скрипте всё ещё не переведены, - это краткое описание алгоритма работы скрипта. Листинг скрипта для арча: Код [arch<>archiso ~]$ cat /usr/bin/mplayer-vc Код #!/bin/bash # mplayer-vc # # Script for full-screen viewing of local video in mplayer via console. # This script automatically adjusts the video output to full screen # for a monitor with any resolution and does not require the user # to enter additional options. # Copyright 2018 Yury Pakin (ака Speccyfighter) <zxwarior<>yandex.ru> # LICENSE: # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # parse options opt=1 helptext="\ Script for full-screen viewing of local video in mplayer through console. This script automatically adjusts the video output to full screen for a monitor with any resolution and does not require additional options. Usage: mplayer-vc /path/to/videofile -h --help print this help text " [ $# -ne 0 ] || set -- -h while test "$opt" = "1"; do case "$1" in # fbgs options -h | --help) printf "$helptext" exit 1 ;; # others options -*) echo -e "\nunknown option: $1\n" exit 1 ;; *) opt=0 ;; esac done # Проверка наличия локального файла file "$*" &>/dev/null if [ "$?" != 0 ] then echo -e "\nNo such file\n" exit 0 fi VIDEOFILE=$(echo "$*") # Разрешение оригинального видеофайла по X VIDEOWIDTH=`mediainfo "$VIDEOFILE" | grep 'Width' | awk '{printf $3}'` # Разрешение оригинального видеофайла по Y VIDEOHEIGHT=`mediainfo "$VIDEOFILE" | grep 'Height' | awk '{printf $3}'` # Пропорции изображения видео в десятичном виде VIDEOASPECT=`echo "$VIDEOWIDTH/$VIDEOHEIGHT" | bc -l` # Пропорции фреймбуфера в десятичном виде FBASPECT=`fbset --test | grep mode | awk -F '"' '{print $2}' | sed 's/x/\//' | bc -l |sed 's/^\(......\).*/\1/'` # Разрешение фреймбуфера по Y в пикселах FBHEIGHT=`fbset --test | grep mode | awk -F '"' '{print $2}' | awk -F 'x' '{printf $2}'` # Если aspect (пропорции) фреймбуфера больше чем aspect видеофайла, # то вычислить коэффициент масштабирования до Y фреймбуфера, # затем вычислить по коэффициенту максимально допустимый размер # в пикселах при масштабирование видеофайла по X, чтобы при # масштабировании по -xy, видеофайл не выходил за пределы экрана # по координате Y if [[ $FBASPECT > $VIDEOASPECT ]] then VSIZEXXX=`echo "$FBHEIGHT/$VIDEOHEIGHT" | bc -l` XVSIZE=`echo "$VIDEOWIDTH*$VSIZEXXX" | bc -l` # иначе вычислить X фреймбуфера else XVSIZE=`fbset --test|grep geometry|awk '{print $2}'` fi # пропорционально масштабировать по коэффициенту # до X фреймбуфера, - в переменной XVSIZE setterm --blank 0; mplayer -nocache -softvol -vo fbdev2 -xy $XVSIZE -fs -zoom -framedrop "$VIDEOFILE" &>/dev/null (Пустая строка в конце файла обязательна!) |
|
|
31.10.2019, 23:09
Сообщение
#16
|
|
Специалист Группа: Активный Пользователь Сообщений: 145 Регистрация: 6.3.2019 Вставить ник Цитата Пользователь №: 3002 Страна: Россия Город: Не указан Пол: Муж. Репутация: 2 |
|
|
|
1.11.2019, 6:59
Сообщение
#17
|
|
Специалист Группа: Активный Пользователь Сообщений: 145 Регистрация: 6.3.2019 Вставить ник Цитата Пользователь №: 3002 Страна: Россия Город: Не указан Пол: Муж. Репутация: 2 |
# потом уже увидел дату первого сообщения ( не знаю, может в последней версии и так налажено ...)
|
|
|
4.11.2019, 8:46
Сообщение
#18
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Спасибо Юра, проверил - отлично работает ! Прикрутил к mc , добавил пакеты и отправил в новую версию ледяного ( в /usr/local/bin )
|
|
|
5.11.2019, 23:25
Сообщение
#19
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Спасибо Юра, проверил - отлично работает ! Прикрутил к mc , добавил пакеты и отправил в новую версию ледяного ( в /usr/local/bin ) Прошлой ночью, ну сова же , появилась мысль ввести в скрипт запрет на запуск скрипта в X-терминале. Зачем это нужно: Из-за необходимости -vo fbdev2 для арча, скрипт для альтов и для арча начал разъезжаться и это мне нифига не нравится. Поскольку это ломает философию платформы ZX Spectrum, - это должно работать на любой архитектуре. Как оно мысленно выстраивается: Введение в скрипт и для арча и для альта -vo fbdev2. Но при явном указании fbdev2, при запуске в /dev/pts/* (в X-терминале) вылезет неприятный баг. Отсюда возникает необходимость запрета запуска скрипта mplayer-vc в /dev/pts/*, но разрешения запуска в /dev/tty* (виртуальном терминале). И это даст единообразие кода скрипта для арча и альтов. К тому же не будет проявляться ошибка на setterm --blank 0, проявляющаяся в любом X-терминале. Обработка на разрешение запуска в tty и запрета запуска в pts может быть где-то такой: Алгоритм обработки: Парсить выброс команды tty без опций. Если запуск mplayer-vc в pts, то предупредить пользователя и остановить выполнение скрипта. Иначе, если запуск в tty, продолжить выполнение. /dev/pts/* - это X-терминал /dev/tty* - это виртуальная консоль Код $ cat search-tty-2.sh DEVOUT=`tty | cut -f3 -d / | head -c 3` if [ $DEVOUT != "tty" ] then echo -e "\nIt is not /dev/tty*\nRun mplayer-vc in virtual console\n" exit 0 fi Проще говоря: Скрипт mplayer-vc с этим кодом, будет работать в виртуальной консоли, но не будет работать в X-терминале. Принимаются предложения с "За" и "Нафик". С аргументацией. |
|
|
6.11.2019, 12:15
Сообщение
#20
|
|
Профессионал Группа: Активный Пользователь Сообщений: 1651 Регистрация: 12.10.2010 Вставить ник Цитата Пользователь №: 1950 Страна: Россия Город: Не указан Пол: Муж. Репутация: 8 |
|
|
|
6.11.2019, 20:23
Сообщение
#21
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
а может просто если иксы найдены, то не добавлять в строку запуска -vo fbdev2 ? Интересная мысль. Скрипт с этим блоком надо протестировать в арче (перенаправив весь вывод mplayer в файл) Код # sed -n '105,118p' /usr/bin/mplayer-vc-copy # Выбор опция/параметр устройства вывода видео # для виртуальной консоли или X-теминала VIDEOOUTPUT="" DEVOUT=`tty | cut -f3 -d / | head -c 3` if [ $DEVOUT = "tty" ] then setterm --blank 0 VIDEOOUTPUT=" -vo fbdev2 " # else # VIDEOOUTPUT=" -vo что-то " fi на предмет используемого по-умолчанию -vo *. В альте, это по-умолчанию xv Код $ grep ^VO ~/mplayer-output.txt VO: [xv] 480x360 => 1024x768 Planar YV12 [fs] [zoom] |
|
|
6.11.2019, 21:05
Сообщение
#22
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Скрипт с этим блоком надо протестировать в арче (перенаправив весь вывод mplayer в файл) Код # sed -n '105,118p' /usr/bin/mplayer-vc-copy # Выбор опция/параметр устройства вывода видео # для виртуальной консоли или X-теминала VIDEOOUTPUT="" DEVOUT=`tty | cut -f3 -d / | head -c 3` if [ $DEVOUT = "tty" ] then setterm --blank 0 VIDEOOUTPUT=" -vo fbdev2 " # else # VIDEOOUTPUT=" -vo что-то " fi на предмет используемого по-умолчанию -vo *. В альте, это по-умолчанию xv Код $ grep ^VO ~/mplayer-output.txt VO: [xv] 480x360 => 1024x768 Planar YV12 [fs] [zoom] С этим блоком выбора VIDEOOUTPUT и со строкой Код $ tail -n 1 /usr/bin/mplayer-vc-copy mplayer -nocache -softvol $VIDEOOUTPUT -xy $XVSIZE -fs -zoom -framedrop "$VIDEOFILE" &>$HOME/mplayer-output.txt протестировал в альте Код $ mplayer-vc-copy ~/Загрузки/clips/Country-video/Trace\ Adkins\ -\ Just\ Fishin\'-IheODRwalEw.mp4 в X-терминале (/dev/pts/*) Код $ grep ^VO ~/mplayer-output.txt VO: [xv] 640x360 => 1365x768 Planar YV12 [fs] [zoom] и в виртуальной консоли (/dev/tty*) Код $ grep ^VO ~/mplayer-output.txt VO: [fbdev2] 1365x768 => 1365x768 BGRA [fs] [zoom] Теперь это же надо посмотреть в арче. На предмет необходимости else с явным указанием -vo в блоке. Или достаточно будет и без оного. |
|
|
6.11.2019, 21:48
Сообщение
#23
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Проще говоря: Скрипт mplayer-vc с этим кодом, будет работать в виртуальной консоли, но не будет работать в X-терминале. Принимаются предложения с "За" и "Нафик". С аргументацией. Код include/video Open=if [ -n "$DISPLAY" ];then mpv %f; else mplayer-vc %f; fi Юра , это кусок из моих настроек mc, твой скрипт будет запускаться только в чистой консоли. Причем думаю разницы никакой что в арче, что в альте ( стащил идею по-моему у дебианистов ). Может просто вставить эту проверку в твой скрипт ? Сейчас проверю твой способ . |
|
|
6.11.2019, 22:42
Сообщение
#24
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Юра, вот vo из mplayer-а играющего из под qterminal :
VO: [xv] 320x240 => 320x240 Planar YV12 не удивляйся разрешению , снимал давно фотиком. Сообщение отредактировал kostyalamer - 6.11.2019, 22:44 |
|
|
7.11.2019, 0:01
Сообщение
#25
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Юра, вот vo из mplayer-а играющего из под qterminal : VO: [xv] 320x240 => 320x240 Planar YV12 не удивляйся разрешению , снимал давно фотиком. Кость, фиг с ним, с разрешением. Я ещё и не такое тестирую. Погонял скрипт с новым блоком в ледяном. Получил засаду: - При попытке выхода из Х-сессии, автоматом с автологином снова заход в root Х-сессию и не могу залогиниться в Х-сы непревилегированного пользователя arch. - При попытке зайти из root Х-терминала в сессию пользователя arch через '# su - arch', само-собой не экспортируется переменная DISPLAY в окружение пользователя. И это приведёт к отказу работы скрипта в лайве ледяного из под непревилегированного пользователя arch. Поэтому, если запуск mplayer-vc из под непревилегированного пользователя arch, то: - пользователь должен быть в группе video. - переменная DISPLAY должна быть экспортирована в окружение пользователя: '$ export DISPLAY=:0' (echo $DISPLAY). Т.е. тот дисплей в котором запускается скрипт. Иначе скрипт в арче под непревилегированным откажется работать по причине пустой переменной DISPLAY: Код [arch<>archiso ~]$ grep -i '^vo\|^err' ./mplayer-output.txt | head -n 2 vo: couldn't open the X11 display ()! Error opening/initializing the selected video_out (-vo) device. Но принудительно в скрипте указывать опцию -display с параметром нельзя. Поскольку в мультисессии, неизвестно, в каком дисплее будет запускаться скрипт в Х-сессии. (у меня на домашней станции, как правило DISPLAY не один, - мультисессии) '-vo xv' с else выброшено и нафик не надо, поскольку автоматом по-дефолту и в альте и в арче, при запуске скрипта в Х-сах, подхватывается xv. Здесь главное чтобы переменная DISPLAY была не пустая. И скрипт отработает. Листинг универсального скрипта и под арч и под альты, для запуска в виртуальной консоли и в Х-терминале. Код # cat /usr/bin/mplayer-vc Код #!/bin/bash # mplayer-vc # # Script for full-screen viewing of local video in mplayer via console. # This script automatically adjusts the video output to full screen # for a monitor with any resolution and does not require the user # to enter additional options. # Copyright 2018 Yury Pakin <zxwarior<>yandex.ru> # LICENSE: # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # parse options opt=1 helptext="\ Script for full-screen viewing of local video in mplayer through console. This script automatically adjusts the video output to full screen for a monitor with any resolution and does not require additional options. Usage: mplayer-vc /path/to/videofile -h --help print this help text " [ $# -ne 0 ] || set -- -h while test "$opt" = "1"; do case "$1" in # fbgs options -h | --help) printf "$helptext" exit 1 ;; # others options -*) echo -e "\nunknown option: $1\n" exit 1 ;; *) opt=0 ;; esac done # Проверка наличия локального файла file "$*" &>/dev/null if [ "$?" != 0 ] then echo -e "\nNo such file\n" exit 0 fi VIDEOFILE=$(echo "$*") # Разрешение оригинального видеофайла по X VIDEOWIDTH=`mediainfo "$VIDEOFILE" | grep 'Width' | awk '{printf $3}'` # Разрешение оригинального видеофайла по Y VIDEOHEIGHT=`mediainfo "$VIDEOFILE" | grep 'Height' | awk '{printf $3}'` # Пропорции изображения видео в десятичном виде VIDEOASPECT=`echo "$VIDEOWIDTH/$VIDEOHEIGHT" | bc -l` # Пропорции фреймбуфера в десятичном виде FBASPECT=`fbset --test | grep mode | awk -F '"' '{print $2}' | sed 's/x/\//' | bc -l |sed 's/^\(......\).*/\1/'` # Разрешение фреймбуфера по Y в пикселах FBHEIGHT=`fbset --test | grep mode | awk -F '"' '{print $2}' | awk -F 'x' '{printf $2}'` # Если aspect (пропорции) фреймбуфера больше чем aspect видеофайла, # то вычислить коэффициент масштабирования до Y фреймбуфера, # затем вычислить по коэффициенту максимально допустимый размер # в пикселах при масштабирование видеофайла по X, чтобы при # масштабировании по -xy, видеофайл не выходил за пределы экрана # по координате Y if [[ $FBASPECT > $VIDEOASPECT ]] then VSIZEXXX=`echo "$FBHEIGHT/$VIDEOHEIGHT" | bc -l` XVSIZE=`echo "$VIDEOWIDTH*$VSIZEXXX" | bc -l` # иначе вычислить X фреймбуфера else XVSIZE=`fbset --test|grep geometry|awk '{print $2}'` fi # Опция/параметр выбора драйвера вывода видео # для виртуальной консоли VIDEOOUTPUT="" DEVOUT=`tty | cut -f3 -d / | head -c 3` if [ $DEVOUT = "tty" ] then setterm --blank 0 VIDEOOUTPUT="-vo fbdev2" fi # пропорционально масштабировать по коэффициенту # до X фреймбуфера, - в переменной XVSIZE mplayer -nocache -softvol $VIDEOOUTPUT -xy $XVSIZE -fs -zoom -framedrop "$VIDEOFILE" &>/dev/null В арче скрипт отработает нормально: Код [arch<>archiso ~]$ mplayer-vc ./Trace\ Adkins\ -\ Just\ Fishin\'-IheODRwalEw.mp4 Код [arch<>archiso ~]$ grep -i '^vo\|^err' ./mplayer-output.txt | head -n 2 VO: [xv] 640x360 => 1365x768 Planar YV12 [fs] [zoom] Код [arch<>archiso ~]$ # tty
[arch<>archiso ~]$ grep -i '^vo\|^err' ./mplayer-output.txt | head -n 2 VO: [fbdev2] 1365x768 => 1365x768 BGRA [fs] [zoom] Сообщение отредактировал speccyfighter - 7.11.2019, 0:03 |
|
|
7.11.2019, 6:49
Сообщение
#26
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Система на alt-p8-sysv-tde-i586:
Тест в tty и pts пройден. Скрипт пригоден для сборки rpm пакета. Последний вариант скрипта стал универсальным для арч и альтов. Сообщение отредактировал speccyfighter - 7.11.2019, 6:52 |
|
|
7.11.2019, 8:28
Сообщение
#27
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Система на alt-p8-sysv-tde-i586: Тест в tty и pts пройден. Скрипт пригоден для сборки rpm пакета. Последний вариант скрипта стал универсальным для арч и альтов. Отлично , если соберешь rpm-ку можно отправить в 8-ую и 9-ую клубную репы ( а если с Антоном договоришься, можно и в официальные ). Потом по аналогии могу сделать пакет для Арча и пушнуть его в Aur . |
|
|
7.11.2019, 19:50
Сообщение
#28
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Система на alt-p8-sysv-tde-i586: Тест в tty и pts пройден. Скрипт пригоден для сборки rpm пакета. Последний вариант скрипта стал универсальным для арч и альтов. Отлично , если соберешь rpm-ку можно отправить в 8-ую и 9-ую клубную репы ( а если с Антоном договоришься, можно и в официальные ). Потом по аналогии могу сделать пакет для Арча и пушнуть его в Aur . Угу... Кость, ты ж меня знаешь, если начну докапываться, чтобы довести до релиза, то выгребу всех тараканов. Как выяснилось, скрипт ещё не готов до статуса публичного релиза, который просто должен работать: Дайте мне топор, чтобы я этим поттерингопоклонникам-кодописателям руки нахер поотрубал. Четыре часа бьюсь и не могу понять, какого хера в SL8, скрипт воспроизводит видео в Х-сах, но не воспроизводит в tty, оставляя чёрный экран и шо блин за херня: Код $ grep . --text mplayer-output.txt MPlayer 1.1-5.3.1 (C) 2000-2012 MPlayer Team 192 audio & 401 video codecs Playing /run/media/altlinux/bfa8b5cb-2e1c-4404-ae62-31f90ee3fcf5/wilder/Загрузки/clips/Country-video/Trace Adkins - Just Fishin'-IheODRwalEw.mp4. libavformat version 54.6.100 (internal) libavformat file format detected. [lavf] stream 0: video (h264), -vid 0 [lavf] stream 1: audio (aac), -aid 0, -alang und VIDEO: [H264] 640x360 24bpp 24.000 fps 581.0 kbps (70.9 kbyte/s) Clip info: major_brand: mp42 minor_version: 0 compatible_brands: isommp42 creation_time: 2014-03-07 11:47:19 Load subtitles in /run/media/altlinux/bfa8b5cb-2e1c-4404-ae62-31f90ee3fcf5/wilder/Загрузки/clips/Country-video/ ========================================================================== Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family libavcodec version 54.23.100 (internal) Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264) ========================================================================== ========================================================================== Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders AUDIO: 44100 Hz, 2 ch, s16le, 96.0 kbit/6.80% (ratio: 11999->176400) Selected audio codec: [ffaac] afm: ffmpeg (FFmpeg AAC (MPEG-2/MPEG-4 Audio)) ========================================================================== AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample) Starting playback... Unsupported PixelFormat 61 Unsupported PixelFormat 81 Unsupported PixelFormat 61 [VD_FFMPEG] Trying pixfmt=0. Unsupported PixelFormat 61 Could not find matching colorspace - retrying with -vf scale... Opening video filter: [scale] The selected video_out device is incompatible with this codec. Try appending the scale filter to your filter list, e.g. -vf spp,scale instead of -vf spp. [VD_FFMPEG] Trying pixfmt=1. Could not find matching colorspace - retrying with -vf scale... Opening video filter: [scale] The selected video_out device is incompatible with this codec. Try appending the scale filter to your filter list, e.g. -vf spp,scale instead of -vf spp. Unsupported PixelFormat 81 [VD_FFMPEG] Trying pixfmt=2. Unsupported PixelFormat 81 Could not find matching colorspace - retrying with -vf scale... Opening video filter: [scale] The selected video_out device is incompatible with this codec. Try appending the scale filter to your filter list, e.g. -vf spp,scale instead of -vf spp. [VD_FFMPEG] Trying pixfmt=3. Could not find matching colorspace - retrying with -vf scale... Opening video filter: [scale] Movie-Aspect is 1.78:1 - prescaling to correct movie aspect. [swscaler @ 0xef9a40]BICUBIC scaler, from yuv420p to bgra using MMX2 VO: [fbdev2] 1365x768 => 1365x768 BGRA [fs] [zoom] A: 0.4 V: 0.2 A-V: 0.175 ct: 0.029 0/ 0 98% 14% 0.1% 6 0 Exiting... (Quit) Код $ head -n 21 vcs4-output2text.txt [altlinux<>localhost clips]$ tty /dev/tty4 [altlinux<>localhost clips]$ [altlinux<>localhost clips]$ fbset --test mode "1366x768" geometry 1366 768 1366 768 32 timings 0 0 0 0 0 0 0 rgba 8/16,8/8,8/0,0/0 endmode [altlinux<>localhost clips]$ [altlinux<>localhost clips]$ stty -a | grep column speed 38400 baud; rows 48; columns 170; line = 0; [altlinux<>localhost clips]$ [altlinux<>localhost clips]$ ll /dev/fb0 crw-rw----+ 1 altlinux video 29, 0 ноя 7 19:46 /dev/fb0 [altlinux<>localhost clips]$ [altlinux<>localhost clips]$ groups altlinux wheel uucp proc cdwriter audio radio users fuse video netadmin xgrp scanner [altlinux<>localhost clips]$ Последний выброс, это выброс из tty. Делается он так: Код # fold -w 170 /dev/vcs4 > file.txt Где: -w 170 - параметр columns из выброса 'stty -a' /dev/vcs4 - номер tty из выброса tty без опций, текущего копируемого в файл tty По исходу четвёртого часа до меня начинает ме-е-дленно доходить: Гадские поттеринговоды... Зап*ло начинается с ядерного драйвера, который по-дефолту сажает звуковую карту не в сокет 0, а в сокет 1 Код $ cat /proc/asound/cards 0 [HDMI ]: HDA-Intel - HDA Intel HDMI HDA Intel HDMI at 0xc1210000 irq 51 1 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xc1214000 irq 50 Код $ cat /proc/asound/{cards,modules} 0 [HDMI ]: HDA-Intel - HDA Intel HDMI HDA Intel HDMI at 0xc1210000 irq 51 1 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xc1214000 irq 50 0 snd_hda_intel 1 snd_hda_intel а гадский пульсаудио демон не может разрулить аудиопотоки если поток гонится в tty Код $ ls -1 /usr/bin/*pulse* /usr/bin/pulseaudio /usr/bin/start-pulseaudio-x11 Зап*ляна в том, что обычному пользователю, для которого и предназначен скрипт mplayer-vc, на эти сокеты и потоки глубоко насрать. А если аудио драйвер посадит карту не в сокет 0, то пульс в tty не разрулит потоки и это приведёт к отказу воспроизведения видео, без вываливания в оболочку, с прерыванием по Esc. А всю эту фигню с нормальным воспроизведением видео на mplayer-vc в SL8 с пульсой через tty, поймал на этой команде, подобной скриптовой, но с добавлением явно указанного устройства вывода аудио: Код $ grep . --text vcs4-output2text-2.txt [altlinux<>localhost Country-video]$ mplayer -nocache -softvol -vo fbdev2 -xy 1365 -fs -zoom -framedrop -ao pulse::1 ./Trace\ Adkins\ -\ Just\ Fishin\'-IheODRwalEw.mp4 Потому шо по-дефолту у меня, звук гонится через HDMI, который в сокет 0. А мне и в голову не могло придти, что отказ отображения видео мог быть из-за самой популярной линуксовой звуковой подсистемы. И шо с этой хернёй делать, ума не приложу. Умных мыслей пока нет. Вот такая блин фигня... Блин, при таком откровенно пофигистском отношении к коду системных компонентов в Линукс, в следующий раз, когда спросят, какой Линукс поставить, скажу Винду. Шесть часов улетели к чёртовой матери. Сообщение отредактировал speccyfighter - 7.11.2019, 20:53 |
|
|
7.11.2019, 20:37
Сообщение
#29
|
|
Крупный специалист Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: 1 |
Оттестировал последнюю версию скрипта на этом лайве который с alsa, - это который p9-xfce-sysv с alsa:
Код $ grep -i '^name\|^vers\|^pretty' /etc/os-release NAME="starter kit" VERSION="p9 (Hypericum)" VERSION_ID=p9 PRETTY_NAME="ALT Starterkit (Hypericum)" Если карты ядерный драйвер посадил в сокеты неверно, Код $ cat /proc/asound/cards 0 [HDMI ]: HDA-Intel - HDA Intel HDMI HDA Intel HDMI at 0xc1210000 irq 51 1 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xc1214000 irq 48 то в Х-сах и tty вывод видео будет отображаться (пользователь в группе video), но просто не будет звука. Который накрайняк можно разрулить не через /etc/modprobe.d/alsa-modindex.conf, а через asoundconf-gtk. В alt-p9-xfce-sysv и всех делов-то. Гемора, ну почти ноль же, блин. Но хрен его знает, кто его наваял этот драйвер, Код # modinfo snd_hda_{codec_conexant,codec_hdmi,codec_generic,intel,core} | grep '^file\|^desc\|^lic' filename: /lib/modules/4.19.79-std-def-alt1/kernel/sound/pci/hda/snd-hda-codec-conexant.ko.gz description: Conexant HD-audio codec license: GPL filename: /lib/modules/4.19.79-std-def-alt1/kernel/sound/pci/hda/snd-hda-codec-hdmi.ko.gz description: HDMI HD-audio codec license: GPL filename: /lib/modules/4.19.79-std-def-alt1/kernel/sound/pci/hda/snd-hda-codec-generic.ko.gz description: Generic HD-audio codec parser license: GPL filename: /lib/modules/4.19.79-std-def-alt1/kernel/sound/pci/hda/snd-hda-intel.ko.gz description: Intel HDA driver license: GPL filename: /lib/modules/4.19.79-std-def-alt1/kernel/sound/hda/snd-hda-core.ko.gz license: GPL description: HD-audio bus который сажает карты не в те сокеты в которые должен: Код $ cat /proc/asound/cards
0 [HDMI ]: HDA-Intel - HDA Intel HDMI HDA Intel HDMI at 0xc1210000 irq 51 1 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xc1214000 irq 48 Сообщение отредактировал speccyfighter - 7.11.2019, 21:23 |
|
|
7.11.2019, 20:52
Сообщение
#30
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Юра, хз чего там в Альте, но в Арче твой скрипт прекрасно работает Теперь mc через него показывает видео как под X-ами, так и в чистой консоли. Думаю его еще и к ranger-у прикрутить .
|
|
|
Текстовая версия | Сейчас: 29.3.2024, 16:50 | |