![]() |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Поделиться |
![]()
Сообщение
#1
|
|
Крупный специалист ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
Включил два ноутбука с дисплеями разных пропорций и достал костыллятор:
Всё что ниже, потенциально предназначено для консольных дистрибутивов повседневного пользовательского уровня с уровнем пользователя от среднего и ниже. А также поиск путей упрощения запуска медиаконтента в консоли. С доведением консольных систем до повседневного использования. Первый скрипт: Воспроизводит все видеофайлы с любыми пропорциями на дисплеях с любыми пропорциями. Формат запуска: Код $ 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 |
|
|
![]() |
![]()
Сообщение
#2
|
|
Крупный специалист ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
Потрахался в лайве
Код $ cat /image/.disk/info Simply Linux/x86_64 2017-07-07 День убит. Набросал костылей для правильной работы скрипта mplayer-vc в офигенно Простом Линукс и оттестировал Код $ cat mplayer-in-tty-in-alt-with-pulse.txt mplayer -nocache -softvol -vo fbdev2 -xy 1365 -fs -zoom -framedrop -ao pulse /home/altlinux/Trace Adkins - Just Fishin'-IheODRwalEw.mp4 AUDIOOUTPUT=""; PULSEENABLE=`ls -1 /usr/bin/pulse* | wc -l`; \ if [ $PULSEENABLE != 0 ]; then AUDIOOUTPUT="-ao pulse"; else AUDIOOUTPUT="-ao alsa"; fi AUDIOOUTPUT=""; PULSEENABLE=`ls -1 /usr/bin/pulse* | wc -l`; \ if [ $PULSEENABLE != 0 ]; then AUDIOOUTPUT="-ao pulse"; else AUDIOOUTPUT="-ao alsa"; fi; \ mplayer -nocache -softvol -vo fbdev2 -xy 1365 -fs -zoom -framedrop $AUDIOOUTPUT ./Trace\ Adkins\ -\ Just\ Fishin-IheODRwalEw.mp4 Теперь заключительная часть скрипта mplayer-vc будет выглядеть так Код # tail -n 15 /usr/bin/mplayer-vc-copy-3 # Опция/параметр выбора драйвера вывода аудио AUDIOOUTPUT="" PULSEENABLE=`ls -1 /usr/bin/pulse* | wc -l` if [ $PULSEENABLE != 0 ] then AUDIOOUTPUT="-ao pulse" else AUDIOOUTPUT="-ao alsa" fi # пропорционально масштабировать по коэффициенту # до X фреймбуфера, - в переменной XVSIZE mplayer -nocache -softvol $VIDEOOUTPUT -xy $XVSIZE -fs -zoom -framedrop $AUDIOOUTPUT "$VIDEOFILE" &>$HOME/mplayer-output.txt Осталась совсем херня, - всё это собрать до кучи и протестировать в: - IceArch - alt-p8-sysv-tde - alt-p9-xfce-sysv И чтобы никаких, блин, сбоев, поломок и прочей хрени. Да, и не забыть поправить help, добавив в него предупреждение, что для воспроизведения видео в виртуальной консоли, пользователь должен находиться в группе video. Потому шо в Линупсе, Код # grep 50[0,1] /etc/group altlinux:x:500: tester:x:501: кто первым встал, Код # who altlinux :0 2019-11-08 21:56 (:0) altlinux pts/0 2019-11-08 21:57 (:0.0) altlinux pts/1 2019-11-08 21:57 (:0.0) altlinux pts/2 2019-11-08 21:57 (:0.0) root pts/1 2019-11-08 21:57 (localhost) tester tty2 2019-11-08 22:43 (localhost) того и тапки Код # ls -l /dev/fb* crw-rw----+ 1 altlinux video 29, 0 ноя 8 21:56 /dev/fb0 Не врубился, почему в лайве Простого Линукс, man bash выдаёт No manual entry for bash. Пока ходил в магазин за продуктами, уснул порт из-за грёбаного ядерного usbcore. Кардридер с картой уснул и чуть не потерял наработки скриптов. Команды сброса резервом набивал вслепую. А костыль пакетом disable-usb-autosuspend, который написал за год до сборки образа Простого Линукс, в его образе вообще хер лежит. А когда вся эта херня уснула, получил заставку на гуях: Сессия заблокирована Вы будете перенаправлены на диалог разблокировки автоматически в течение нескольких секунд Само-собой эти секунды превратились в вечность. Хорошо, блин, хоть tty был открыт рутом. Иначе бы скрипты накрылись медным тазом. Писец какой-то... Сообщение отредактировал speccyfighter - 8.11.2019, 22:24 |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 15.6.2025, 10:34 |