![]() |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Поделиться |
![]()
Сообщение
#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 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
Изменён скрипт 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 |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 14.6.2025, 20:28 |