![]() |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Поделиться |
![]()
Сообщение
#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
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: ![]() ![]() ![]() |
Спасибо Юра, проверил - отлично работает ! Прикрутил к mc , добавил пакеты и отправил в новую версию ледяного ( в /usr/local/bin )
|
|
|
![]()
Сообщение
#3
|
|
Крупный специалист ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
Спасибо Юра, проверил - отлично работает ! Прикрутил к mc , добавил пакеты и отправил в новую версию ледяного ( в /usr/local/bin ) Прошлой ночью, ну сова же ![]() Зачем это нужно: Из-за необходимости -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-терминале. Принимаются предложения с "За" и "Нафик". С аргументацией. ![]() |
|
|
![]()
Сообщение
#4
|
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Активный Пользователь Сообщений: 1661 Регистрация: 12.10.2010 Вставить ник Цитата Пользователь №: 1950 Страна: Россия Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
|
|
|
![]()
Сообщение
#5
|
|
Крупный специалист ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
а может просто если иксы найдены, то не добавлять в строку запуска -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
|
|
Крупный специалист ![]() ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 461 Регистрация: 1.5.2013 Вставить ник Цитата Пользователь №: 2379 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
Скрипт с этим блоком надо протестировать в арче (перенаправив весь вывод 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 в блоке. Или достаточно будет и без оного. |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 14.6.2025, 20:23 |