IPB

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> mplayer в консоли, упрощение просмотра видеофайлов в консоли
Поделиться
speccyfighter
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 12.1.2018, 8:41
Сообщение #2


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Юра, может из первого скрипта собрать пакет, чтобы он лежал в /usr/bin ? Я могу конечно сунуть его в скелетон и заодно костыльнуть в root-овский хомяк , но пакетом лучше. Фиг с ними с пробелами , как у него с кириллицей в путях ?
Альяс с mplayer-ом могу закостылить прямо в сборку.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 12.1.2018, 11:32
Сообщение #3


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(kostyalamer @ 12.1.2018, 6:41) *
Фиг с ними с пробелами , как у него с кириллицей в путях ?


Кириллицу проглатывает на ура.
В скрипте:
- Убраны отладочные echo;
- В строку запуска добавлено отключение затемнения экрана;
- В строку запуска добавлено отключение кеша:
По какой-то причине, если кеш не отключен, при воспроизведении видеопотока, через небольшое время воспроизведение прерывается.

При текущем скрипте, имеется возможность воспроизведения видеопотока:
Код
$ mplayer-vc -playlist /path/videodtream.pls

где
videostream.pls
плэйлист с полным http адресом на видеофайл.
Остаётся только выуживать прямой линк на видеофайл. Количество опций сокращается до минимума:
По наличию/отсутствию опции -playlist

Цитата(kostyalamer @ 12.1.2018, 6:41) *
Юра, может из первого скрипта собрать пакет, чтобы он лежал в /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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 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
Все дальнейшие перепакечивания и изменения этого пакета на тебе как на авторе , будешь заодно и его мантейнером smile.gif
Пакет я сделал простенький - дальше при необходимости добавишь все что надо. Сборочные зависимости добавлены через
buildreq -bi , поэтому для p7 не собирается - не хватает 3-ей питонщины ( она по-моему там нафиг не нужна ).
Если хочешь видеть в 7-ой репе ,то достаточно либо сделать под 7-кой buildreq , либо поправить сборочные зависимости вручную. В общем ты хозяин пакета - тебе решать.
Видео показывает отлично, будет в следующей сборке консольного минимала good.gif
PS Потихоньку душу удава, процесс идет biggrin.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 13.1.2018, 9:50
Сообщение #5


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(kostyalamer @ 12.1.2018, 18:48) *
Юра, пакет я собрал, проверил и залил в p8 32-бита:
http://altlinuxclub.ru/repo/Repo_P8/SRPMS.....1-alt1.src.rpm
Все дальнейшие перепакечивания и изменения этого пакета на тебе как на авторе , будешь заодно и его мантейнером smile.gif
Пакет я сделал простенький - дальше при необходимости добавишь все что надо. Сборочные зависимости добавлены через
buildreq -bi , поэтому для p7 не собирается - не хватает 3-ей питонщины ( она по-моему там нафиг не нужна ).
Если хочешь видеть в 7-ой репе ,то достаточно либо сделать под 7-кой buildreq , либо поправить сборочные зависимости вручную. В общем ты хозяин пакета - тебе решать.
Видео показывает отлично, будет в следующей сборке консольного минимала good.gif


OK

Цитата(kostyalamer @ 12.1.2018, 18:48) *
PS Потихоньку душу удава, процесс идет biggrin.gif


Это хорошо biggrin.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
dango_
сообщение 13.1.2018, 11:36
Сообщение #7


Профессионал
*******

Группа: Активный Пользователь
Сообщений: 1143
Регистрация: 10.4.2015
Вставить ник
Цитата
Пользователь №: 2798
Страна: Казахстан
Город: Уральск
Пол: Муж.



Репутация: 5


Мне подождать опакечивание новой версии?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 13.1.2018, 11:37
Сообщение #8


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(dango_ @ 13.1.2018, 9:36) *
Мне подождать опакечивание новой версии?


Да Дан, подожди. Сегодня поправлю и пересоберу.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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 - своего рода аббревиатура, - видеоконсоль

В скрит надо было бы добавить лицензию, но честно говоря, мне лень smile.gif


Теоретически можно было бы добавить расширенный хэлп по этой идее:
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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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, по понятнім причинам не приводится.

В теории процедуру проверки наличия файла можно было бы просто закомментировать, но тогда при отсутствии файла, будет вываливаться ошибка малопонятная пользователю. И это может его шокировать.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 12.6.2018, 20:45
Сообщение #14


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(speccyfighter @ 12.6.2018, 14:23) *
После сборки пакета новой версии, консольный образ live-sysv рекомендуется обновить.

Обновлю, только давай подумаем что еще добавить / изменить в live-sysv , только в этой теме :
http://forum.russ2.com/index.php?showtopic...amp;#entry50178
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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

(Пустая строка в конце файла обязательна!)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
knn
сообщение 31.10.2019, 23:09
Сообщение #16


Специалист
****

Группа: Активный Пользователь
Сообщений: 145
Регистрация: 6.3.2019
Вставить ник
Цитата
Пользователь №: 3002
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 2


Цитата(speccyfighter @ 11.1.2018, 20:10) *
На дух не переносит пробелов в пути:

буду пробовать в 3-ю,5-ю или в какую-еще строку вставить:
Код
IFS=$'\n'

( с mpv - помогает)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
knn
сообщение 1.11.2019, 6:59
Сообщение #17


Специалист
****

Группа: Активный Пользователь
Сообщений: 145
Регистрация: 6.3.2019
Вставить ник
Цитата
Пользователь №: 3002
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 2


# потом уже увидел дату первого сообщения ( не знаю, может в последней версии и так налажено ...)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 4.11.2019, 8:46
Сообщение #18


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Спасибо Юра, проверил - отлично работает ! Прикрутил к mc , добавил пакеты и отправил в новую версию ледяного ( в /usr/local/bin )
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 5.11.2019, 23:25
Сообщение #19


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(kostyalamer @ 4.11.2019, 6:46) *
Спасибо Юра, проверил - отлично работает ! Прикрутил к mc , добавил пакеты и отправил в новую версию ледяного ( в /usr/local/bin )

Прошлой ночью, ну сова же smile.gif , появилась мысль ввести в скрипт запрет на запуск скрипта в 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-терминале.

Принимаются предложения с "За" и "Нафик". С аргументацией. smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
YYY
сообщение 6.11.2019, 12:15
Сообщение #20


Профессионал
*******

Группа: Активный Пользователь
Сообщений: 1651
Регистрация: 12.10.2010
Вставить ник
Цитата
Пользователь №: 1950
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 8


Цитата(speccyfighter @ 5.11.2019, 23:25) *
Скрипт mplayer-vc с этим кодом, будет работать в виртуальной консоли, но не будет работать в X-терминале.
Принимаются предложения с "За" и "Нафик". С аргументацией. smile.gif


а может просто если иксы найдены, то не добавлять в строку запуска

-vo fbdev2

?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 6.11.2019, 20:23
Сообщение #21


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(YYY @ 6.11.2019, 10:15) *
а может просто если иксы найдены, то не добавлять в строку запуска

-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]

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 6.11.2019, 21:05
Сообщение #22


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(speccyfighter @ 6.11.2019, 18:23) *
Скрипт с этим блоком надо протестировать в арче (перенаправив весь вывод 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 в блоке. Или достаточно будет и без оного.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 6.11.2019, 21:48
Сообщение #23


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(speccyfighter @ 5.11.2019, 23:25) *
Проще говоря:
Скрипт mplayer-vc с этим кодом, будет работать в виртуальной консоли, но не будет работать в X-терминале.

Принимаются предложения с "За" и "Нафик". С аргументацией. smile.gif

Код
include/video
    Open=if [ -n "$DISPLAY" ];then mpv %f; else mplayer-vc %f; fi

Юра , это кусок из моих настроек mc, твой скрипт будет запускаться только в чистой консоли.
Причем думаю разницы никакой что в арче, что в альте ( стащил идею по-моему у дебианистов ).
Может просто вставить эту проверку в твой скрипт ?
Сейчас проверю твой способ .
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 7.11.2019, 0:01
Сообщение #25


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(kostyalamer @ 6.11.2019, 20:42) *
Юра, вот vo из mplayer-а играющего из под qterminal :
VO: [xv] 320x240 => 320x240 Planar YV12
не удивляйся разрешению , снимал давно фотиком.


Кость, фиг с ним, с разрешением. Я ещё и не такое тестирую. smile.gif

Погонял скрипт с новым блоком в ледяном.

Получил засаду:
- При попытке выхода из Х-сессии, автоматом с автологином снова заход в 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 7.11.2019, 8:28
Сообщение #27


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(speccyfighter @ 7.11.2019, 6:49) *
Система на alt-p8-sysv-tde-i586:
Тест в tty и pts пройден.
Скрипт пригоден для сборки rpm пакета.

Последний вариант скрипта стал универсальным для арч и альтов.

Отлично , если соберешь rpm-ку можно отправить в 8-ую и 9-ую клубную репы ( а если с Антоном договоришься, можно и в официальные ). Потом по аналогии могу сделать пакет для Арча и пушнуть его в Aur .
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 7.11.2019, 19:50
Сообщение #28


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(kostyalamer @ 7.11.2019, 6:28) *
Цитата(speccyfighter @ 7.11.2019, 4:49) *

Система на alt-p8-sysv-tde-i586:
Тест в tty и pts пройден.
Скрипт пригоден для сборки rpm пакета.

Последний вариант скрипта стал универсальным для арч и альтов.

Отлично , если соберешь rpm-ку можно отправить в 8-ую и 9-ую клубную репы ( а если с Антоном договоришься, можно и в официальные ). Потом по аналогии могу сделать пакет для Арча и пушнуть его в Aur .

Угу... sad.gif
Кость, ты ж меня знаешь, если начну докапываться, чтобы довести до релиза, то выгребу всех тараканов.
Как выяснилось, скрипт ещё не готов до статуса публичного релиза, который просто должен работать:

Дайте мне топор, чтобы я этим поттерингопоклонникам-кодописателям руки нахер поотрубал.

Четыре часа бьюсь и не могу понять, какого хера в 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 7.11.2019, 20:52
Сообщение #30


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Юра, хз чего там в Альте, но в Арче твой скрипт прекрасно работает good.gif Теперь mc через него показывает видео как под X-ами, так и в чистой консоли. Думаю его еще и к ranger-у прикрутить .
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

4 страниц V   1 2 3 > » 
Ответить в эту темуОткрыть новую тему
( Гостей: 1 )
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28.3.2024, 14:38