![]() |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Поделиться |
![]()
Сообщение
#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 Страна: Беларусь Город: Не указан Пол: Муж. Репутация: ![]() ![]() ![]() |
Похоже есть способ получше чем mediainfo:
Идентификация видеофайла(ов) Видеофайлы Код $ mplayer -identify -vo null -ao null -frames 0 /home/tos-1720x720-cfg01.mkv | sed -n 's/^ID_//p' VIDEO_ID=0 AUDIO_ID=0 AID_0_LANG=eng SUBTITLE_ID=0 SID_0_LANG=hrv SUBTITLE_ID=1 SID_1_LANG=cze SUBTITLE_ID=2 SID_2_LANG=dan SUBTITLE_ID=3 SID_3_LANG=ger SUBTITLE_ID=4 SID_4_LANG=eng SUBTITLE_ID=5 SID_5_LANG=spa SUBTITLE_ID=6 SID_6_LANG=fre SUBTITLE_ID=7 SID_7_LANG=gre SUBTITLE_ID=8 SID_8_LANG=heb SUBTITLE_ID=9 SID_9_LANG=hun SUBTITLE_ID=10 SID_10_LANG=ind SUBTITLE_ID=11 SID_11_LANG=ita SUBTITLE_ID=12 SID_12_LANG=jpn SUBTITLE_ID=13 SID_13_LANG=dut SUBTITLE_ID=14 SID_14_LANG=nor SUBTITLE_ID=15 SID_15_LANG=per SUBTITLE_ID=16 SID_16_LANG=pol SUBTITLE_ID=17 SID_17_LANG=por SUBTITLE_ID=18 SID_18_LANG=rus SUBTITLE_ID=19 SID_19_LANG=chi VIDEO_CODEC=ffhevc CLIP_INFO_NAME0=encoder CLIP_INFO_VALUE0=libebml v1.3.0 + libmatroska v1.4.1 CLIP_INFO_NAME1=creation_time CLIP_INFO_VALUE1=2014-03-18T13:19:29.000000Z CLIP_INFO_N=2 FILENAME=/home/tos-1720x720-cfg01.mkv DEMUXER=lavfpref VIDEO_FORMAT=HEVC VIDEO_BITRATE=0 VIDEO_WIDTH=1720 VIDEO_HEIGHT=720 VIDEO_FPS=24.000 VIDEO_ASPECT=0.0000 AUDIO_FORMAT=8192 AUDIO_BITRATE=448000 AUDIO_RATE=48000 AUDIO_NCH=6 START_TIME=0.00 LENGTH=734.17 SEEKABLE=1 CHAPTERS=0 [ac3 @ 0x7ff28f7c9260]Channel layout '5.1(side)' with 6 channels does not match specified number of channels 2: ignoring specified channel layout AUDIO_BITRATE=448000 AUDIO_RATE=48000 AUDIO_NCH=2 AUDIO_CODEC=ffac3 EXIT=EOF Код $ mplayer -identify -vo null -ao null -frames 0 /home/Trace\ Adkins\ -\ Just\ Fishin\'.mp4 | sed -n 's/^ID_//p' VIDEO_ID=0 AUDIO_ID=0 VIDEO_CODEC=ffh264 CLIP_INFO_NAME0=major_brand CLIP_INFO_VALUE0=mp42 CLIP_INFO_NAME1=minor_version CLIP_INFO_VALUE1=0 CLIP_INFO_NAME2=compatible_brands CLIP_INFO_VALUE2=isommp42 CLIP_INFO_NAME3=creation_time CLIP_INFO_VALUE3=2014-03-07T11:47:19.000000Z CLIP_INFO_N=4 FILENAME=/home/Trace Adkins - Just Fishin'.mp4 DEMUXER=lavfpref VIDEO_FORMAT=H264 VIDEO_BITRATE=581008 VIDEO_WIDTH=640 VIDEO_HEIGHT=360 VIDEO_FPS=24.000 VIDEO_ASPECT=0.0000 AUDIO_FORMAT=MP4A AUDIO_BITRATE=95992 AUDIO_RATE=44100 AUDIO_NCH=2 START_TIME=0.00 LENGTH=210.05 SEEKABLE=1 CHAPTERS=0 AUDIO_BITRATE=95992 AUDIO_RATE=44100 AUDIO_NCH=2 AUDIO_CODEC=ffaac EXIT=EOF Код $ mplayer -identify -vo null -ao null -frames 0 ./avi4test.avi | sed -n 's/^ID_//p' VIDEO_ID=0 AUDIO_ID=1 VIDEO_CODEC=ffh264 CLIP_INFO_NAME0=Software CLIP_INFO_VALUE0=Lavf56.25.101 CLIP_INFO_N=1 FILENAME=./avi4test.avi DEMUXER=avi VIDEO_FORMAT=H264 VIDEO_BITRATE=293032 VIDEO_WIDTH=640 VIDEO_HEIGHT=360 VIDEO_FPS=59.940 VIDEO_ASPECT=0.0000 AUDIO_FORMAT=255 AUDIO_BITRATE=95992 AUDIO_RATE=0 AUDIO_NCH=0 START_TIME=0.00 LENGTH=790.72 SEEKABLE=1 CHAPTERS=0 AUDIO_BITRATE=95992 AUDIO_RATE=44100 AUDIO_NCH=2 AUDIO_CODEC=ffaac EXIT=EOF ASCII файл Код $ mplayer -identify -vo null -ao null -frames 0 /home/abcde.txt | sed -n 's/^ID_//p' VIDEO_ID=0 VIDEO_CODEC=ffansi SUB: Could not determine file format Cannot load subtitles '/home/abcde.txt'. FILENAME=/home/abcde.txt DEMUXER=lavf VIDEO_FORMAT=TXT4 VIDEO_BITRATE=0 VIDEO_WIDTH=640 VIDEO_HEIGHT=400 VIDEO_FPS=25.000 VIDEO_ASPECT=0.0000 START_TIME=0.00 LENGTH=0.04 SEEKABLE=1 CHAPTERS=0 EXIT=EOF Каталог Код $ mplayer -identify -vo null -ao null -frames 0 /home/tester | sed -n 's/^ID_//p' File not found: '/home/tester' Failed to open /home/tester. EXIT=EOF Сходство/различие, в наличии/отсутствии секции CLIP_INFO_*. У видеофайлов она есть. А парсить X и Y файла на три порядка проще чем в выбросе уродского mediainfo. В этих же выбросах, сухо, кратко, но по-сути и всё для вас. Тьфу, - для парсинга. Выдернуто тут: Код /usr/lib/mc/ext.d/video.sh #!/bin/sh # $1 - action # $2 - type of file action=$1 filetype=$2 [ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open" do_view_action() { filetype=$1 case "${filetype}" in *) if mplayer >/dev/null 2>&1; then mplayer -identify -vo null -ao null -frames 0 "${MC_EXT_FILENAME}" 2>&1 | \ sed -n 's/^ID_//p' elif which mpv_identify.sh >/dev/null 2>&1; then mpv_identify.sh "${MC_EXT_FILENAME}" else echo "Please install either mplayer or mpv to get information for this file" fi ;; esac } Ну и следом с применением команды Код $ mplayer -identify -vo null -ao null -frames 0 /path/to/videofile 2>&1 | \ sed -n 's/^ID_//p' Нет ничего проще, - перенаправляй в переменную и дёргай из неё. Формат выбросов прост и предсказуем как две копейки. И видно что люди делали для людей. И так же отсечь каталоги: Код $ man test | sed -n '3,12p; 82,84p' NAME test - check file types and compare values SYNOPSIS test EXPRESSION test [ EXPRESSION ] [ ] [ OPTION -d FILE FILE exists and is a directory Проверка на каталог Код $ cat test-dirs.sh #!/bin/bash # Checking for a directory if test -d "$@"; then echo -e "\nThis is the directory\n" fi Код $ sh ./test-dirs.sh ../tester This is the directory Соответственно проверка на файл Код [ ~]$ cat 123.sh #!/bin/bash # Checking for a directory if test -d "$@" then echo >/dev/null else echo -e "\nfile\n" fi Код [ ~]$ sh 123.sh /home/tester/ [ ~]$ Код [ ~]$ sh 123.sh /home/abcde.txt file Сообщение отредактировал speccyfighter - 27.11.2019, 11:19 |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 15.6.2025, 9:55 |