![]() |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Поделиться |
![]()
Сообщение
#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 версии 0.4.0
Код #!/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. To play video in the virtual console, the user must be in the video group. On alsa systems, if the sound card is not in socket 0, reindex the sound cards. Usage: mplayer-vc /path/to/videofile Playing and exit mplayer-vc ../path/to/*.mp4 Endless cycle mplayer-vc ./path/to/* Endless cycle Keys: 9 / 0 Decrease/increase volume m Mute sound p / SPACE Pause (pressing again unpauses) f Toggle fullscreen (X-only) LEFT and RIGHT Backward/forward 10 seconds UP and DOWN Forward/backward 1 minute PGUP and PGDWN Forward/backward 10 minutes 1 and 2 Adjust contrast 3 and 4 Adjust brightness Playing a single video file: q / ESC / Ctrl+c Stop playing and quit Playing a loop of video files: q / ESC Go to the next video Double-press the q key Stop and exit video file loop playback Double-press Ctrl+C Stop and exit video file loop playback (tty only) -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\nUse -h or --help.\n" exit 1 ;; *) opt=0 ;; esac done VIDEOFILE= # Framebuffer resolution and permissible video file resolution resolution () { # Resolution of the original video file in X coordinate VIDEOWIDTH=`echo "$MEDIAINFO" | grep 'VIDEO_WIDTH' | awk -F '=' '{print $2}'` # Resolution of the original video file in Y coordinate VIDEOHEIGHT=`echo "$MEDIAINFO" | grep 'VIDEO_HEIGHT' | awk -F '=' '{print $2}'` # Video image proportions in decimal VIDEOASPECT=`echo "$VIDEOWIDTH/$VIDEOHEIGHT" | bc -l` # Decimal proportions of framebuffer FBASPECT=`fbset --test | grep mode | awk -F '"' '{print $2}' | sed 's/x/\//' | bc -l |sed 's/^\(......\).*/\1/'` # Framebuffer resolution in Y coordinate in pixels FBHEIGHT=`fbset --test | grep mode | awk -F '"' '{print $2}' | awk -F 'x' '{printf $2}'` # If the framebuffer aspect ratio is greater than the aspect of # the video file, then calculate the scaling factor to # framebuffer Y. Then, calculate by the coefficient the maximum # allowable size in pixels when scaling the video file in X, so # that when scaling in -xy, the video file does not go beyond # the screen in the Y coordinate. if [[ $FBASPECT > $VIDEOASPECT ]] then VSIZEXXX=`echo "$FBHEIGHT/$VIDEOHEIGHT" | bc -l` XVSIZE=`echo "$VIDEOWIDTH*$VSIZEXXX" | bc -l` # otherwise compute X framebuffer else XVSIZE=`fbset --test|grep geometry|awk '{print $2}'` fi } # Option / parameter for selecting video output driver # for virtual console VIDEOOUTPUT="" DEVOUT=`tty | cut -f3 -d / | head -c 3` if [ $DEVOUT = "tty" ] then setterm --blank 0 VIDEOOUTPUT="-vo fbdev2" fi # Option/parameter for selecting audio output driver # pulse or alsa AUDIOOUTPUT="" PULSEENABLE=`ls -1 /usr/bin/ | grep ^pulseaudio | wc -l` if [[ $PULSEENABLE != 0 ]] then AUDIOOUTPUT="-ao pulse" else AUDIOOUTPUT="-ao alsa" fi ## ## Play section ## # One or several files selector # # If there is one argument, then if [[ $# == 1 ]] then MEDIAINFO= MEDIAYES= # if the file is not a directory, then VIDEOFILE="$@" TYPEFILE=`file -b "$VIDEOFILE"` if [ "$TYPEFILE" != "directory" ] then MEDIAINFO=`mplayer -identify -vo null -ao null -frames 0 "$VIDEOFILE" 2>/dev/null | sed -n 's/^ID_//p' | sed -e '$ d'` MEDIAYES=`echo "$MEDIAINFO" | grep "CLIP_INFO_" | wc -c` if [[ $MEDIAYES > 0 ]] then resolution # Play with variable substitution above clear; mplayer -nocache -softvol -noautosub -nosub $VIDEOOUTPUT -xy $XVSIZE -fs -zoom -framedrop $AUDIOOUTPUT "$VIDEOFILE" &>/dev/null exit 0 else echo -e "\nThis is not a video file\n" exit 0 fi elif [ "$TYPEFILE" == "directory" ] then echo -e "\nThis is a directory\n" exit 0 fi else # If there are a lot of files, then if [[ $# > 1 ]] then MEDIAINFO= MEDIAYES= # all of them in an infinite loop while true do # Each path is a word ($@), for the path ../*: "directory mediafile directory" # If the file is Media, output to stdout (play) # Directories and non-media skip # Parse script parameter: ../* or ../file.mp4 for VIDEOFILE in "$@" do # Skip the directory TYPEFILE=`file -b "$VIDEOFILE"` if [ "$TYPEFILE" != "directory" ] then MEDIAINFO=`mplayer -identify -vo null -ao null -frames 0 "$VIDEOFILE" 2>/dev/null | sed -n 's/^ID_//p' | sed -e '$ d'` MEDIAYES=`echo "$MEDIAINFO" | grep "^CLIP_INFO_" | wc -c` if [[ $MEDIAYES > 0 ]] then resolution # Scale proportionally by factor to the X coordinate # of the framebuffer, in the XVSIZE variable. clear; mplayer -nocache -softvol -noautosub -nosub $VIDEOOUTPUT -xy $XVSIZE -fs -zoom -framedrop $AUDIOOUTPUT "$VIDEOFILE" &>/dev/null # Poll 3 seconds of pressing the 'q' key to exit for (( i=1; i <= 3; i++ )) do # Clear variable for keyboard input B="" # Read one character from standard input read -s -t 1 -n 1 B # Key Press Poll case "$B" in [qQ] ) B="q";; esac # Exit if 'q' key is pressed if [ "$B" == "q" ] then exit 0 fi done fi fi done done fi fi Изменения: - Расширен help - Добавлен блок проигрывания группы видеофайлов по маске в замкнутом цикле - Добавлен обработчик опроса клавиатуры для выхода из проигрывания в цикле - Два блока определения разрешения монитора, файла и масштабирование выделены в отдельную функцию - Убрана зависимость на mediainfo: теперь анализом разрешений и наличия видеофайла занимается сам mplayer Скрипт умеет: - Проигрывать одиночный видео файл с завершением проигрывания или завершением по клавише q - Проигрывать группу файлов по произвольной маске в замкнутом цикле с завершением по двойному нажатию клавиши q - При проигрывании в tty выбирает драйвер вывода видео - При проигрывании в Х-сах драйвер вывода видео выбирает плеер - В системе с пульсаудио используется пульсаудио; в системе с alsa, - alsa драйвер - Видео автоматически масштабируется и подстравается под разрешение монитора Недостатки: - Не смог убрать блинкование курсора. Поэтому командой clear в скрипте, курсор загоняется в левый верхний угол экрана. Прямыми командами setterm --cursor off setterm --cursor on tput civis tput cnorm курсор выключается и включается, но из скрипта это не работает при проигрывании видео. Принимаются любые дельные практические советы. Скриптовый help: Код 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. To play video in the virtual console, the user must be in the video group. On alsa systems, if the sound card is not in socket 0, reindex the sound cards. Usage: mplayer-vc /path/to/videofile Playing and exit mplayer-vc ../path/to/*.mp4 Endless cycle mplayer-vc ./path/to/* Endless cycle Keys: 9 / 0 Decrease/increase volume m Mute sound p / SPACE Pause (pressing again unpauses) f Toggle fullscreen (X-only) LEFT and RIGHT Backward/forward 10 seconds UP and DOWN Forward/backward 1 minute PGUP and PGDWN Forward/backward 10 minutes 1 and 2 Adjust contrast 3 and 4 Adjust brightness Playing a single video file: q / ESC / Ctrl+c Stop playing and quit Playing a loop of video files: q / ESC Go to the next video Double-press the q key Stop and exit video file loop playback Double-press Ctrl+C Stop and exit video file loop playback (tty only) -h --help print this help text Сообщение отредактировал speccyfighter - 28.11.2019, 13:51 |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 14.6.2025, 19:37 |