Место для Вашей рекламы всего за 400 рублей в месяц ! email:incognito.anonimous@yandex.ru

Спонсор проекта:
Лучший вариант для анонимности купить прокси на выделенном сервере IPANN.NET.
Ads



Последние комментарии
#1
watersoda пишет: » Да и RHEL под "Эльбрус" не помешал бы... (19.03.2017)
// Обзор и попытка установки МСВС 5.0
#2
watersoda пишет: » Небольшая поправка: ... через соответствующий паке... (19.03.2017)
// Обзор и попытка установки МСВС 5.0
#3
watersoda пишет: » Кстати, мелькала где-то информация, что Red Hat сд... (19.03.2017)
// Обзор и попытка установки МСВС 5.0
#4
watersoda пишет: »
Цитата:
... МСВС отстаёт от ДОСа по поддержке виде...
(16.03.2017)
// Обзор и попытка установки МСВС 5.0
#5
admin пишет: » watersoda, этот ноутбук выпущен в 2012 году wink
Убунт... (16.03.2017)
// Обзор и попытка установки МСВС 5.0
#6
watersoda пишет: » И вот ещё, правда речь про МСВС 3.0:
Цитата:
Устрои...
(08.03.2017)
// Обзор и попытка установки МСВС 5.0
#7
watersoda пишет: » Я где-то читал, что ВНИИНС предоставляет список об... (08.03.2017)
// Обзор и попытка установки МСВС 5.0
#8
дохтур пишет: »
Gentoo написал:
Вот мне лично нахуй не надо ни одн...
(02.02.2017)
// Письма неадекватов
#9
дохтур пишет: »
Gentoo написал:
Вот мне лично нахуй не надо ни одн...
(02.02.2017)
// Письма неадекватов
#10
Gentoo пишет: » >>Autocad, Kompas, CorelDraw, SolidWorks, AD... (30.01.2017)
// Письма неадекватов
#11
watersoda пишет: » Just for fun как он есть.biggrin (15.01.2017)
// Линукса нет! Нас обманули !!!
#12
дохтур пишет: » admin, ага, ещё вот проприетарная лицензия на обще... (13.01.2017)
// Письма неадекватов
#13
admin пишет: » дохтур, а ранили его "тупые виндузяги" с... (13.01.2017)
// Письма неадекватов
#14
дохтур пишет: » Это была какая-то очень ранимая заблудшая душа (13.01.2017)
// Письма неадекватов
#15
admin пишет: »
дохтур написал:
Ровно такая же ситуация и с HD-Aud...
(09.01.2017)
// FreeDOS 1.2 Обзор
Quotes
Подозреваю, линукс-сообщество не выдержит такой наплыв убантнутых ламеров и уйдёт в глубокое подполье

Как смореть видео в консоли | автор: Luca | 31 октября 2010 |

Категория: GNU/Linux


Пора открывать раздел "уголок задрота". Предлагаю одно небольшое сочинение очень красноглазгого человека, на тему "как я смотрю фильмы в Linux". Очень возможно, что это один из тех людей, кто занимается внедрением Linux в школы и быть может именно он пойдет учить детей ваших информатике.


Для просмотра всего этого добра я пользуюсь консольной версией самого всеядного медиаплеера mplayer. (Давайте воздержимся от холивара по поводу красноглазия и GUI vs консоль) Но вот незадача, для каждой новой серии приходится заново набирать длинную команду вроде такой:

$ mplayer -ass -subcp cp1251 имя_сериала_01_еще_какая_то_чушь.mkv
Ясное дело, что я не набираю всю эту простыню с нуля, а просто стираю бэкспейсом до номера серии, пишу новый номер и табом дополняю до конца имени файла. Но это ведь долго и неудобно, можно промахнуться и стереть лишнего.
А еще часто смотрится несколько сериалов параллельно, по мере выхода новых серий. И помнить, на какой серии я остановился в прошлый раз, и с какими параметрами и ключами запускал mplayer, становится затруднительно. И поэтому я решил написать себе на шелле простую запускалку плеера, которая будет запоминать параметры, номер последнего просмотренного эпизода и уметь подставлять номер следующего в команду запуска.

Интерфейс

Для начала определимся, какой интерфейс должен быть у этой обертки.
Номера сериалов практически всегда двузначные, поэтому я не стал заморачиваться с поддержкой однозначных или трехзначных чисел.
Вот так будет выглядеть первоначальная настройка, которую нужно выполнить только один раз:
$ cd ~/имя_сериала # где и что мы хотим смотреть
$ ls # смотрим, как называются видео-файлы
serial_name_01_bla_bla.avi
serial_name_01_bla_bla.srt
serial_name_02_bla_bla.avi
serial_name_02_bla_bla.srt
...
$ serial set mask "serial_name_??_bla_bla.avi" # указываем параметр name - имя видеофайлов с замененным номером серии на "??"
# serial set options -subcp cp1251 # опционально указываем параметр options - ключи, с которыми запускать mplayer

А теперь смотрим:
$ serial next # Начнем с начала
Playing episode 01...
...
$ serial next # Понравилось, давайте следующий
Playing episode 02...
...
$ serial same # Увидел смешной момент, хочу пересмотреть заново этот же эпизод
Playing episode 02...
...
$ serial episode 14 # Перепрыгиваем к конкретному эпизоду
Playing episode 14...
...
$ while true; do; serial n; sleep 1; done; # нон-стоп

А если у нас имена эпизодов различаются не только номером серии? Тогда используем подстановку shell:
$ ls # смотрим, как называются видео-файлы
serial_name_01_qwerty.mkv
serial_name_02_asdfgh.mkv
$ serial set mask "serial_name_??_*.avi" # указываем параметр name c заменой подстановки на звездочку
$ serial set glob yes # выполнять подстановку
Пишем

Выставим дефолтные значения, это просто:
player=mplayer
options=""
episode=00

Где будем хранить данные о состоянии просмотра? В первую очередь приходит мысль записать это прямо в папку, в которой он лежит, но такой вариант не подойдет, если вы смотрите сериал с компакт-диска, который, как известно, read-only. Также защищенными от записи могут быть сетевые папки (nfs/samba) или просто неправильно настроенные права у торрентокачалки.
Поэтому хранить будем в домашней папке, но идентифицировать сериал будем так же по пути в файловой системе, где эпизоды лежат. Для удобства лучше еще взять от него хэш, чтобы не иметь дела с экранированием всяких спецсимволов, которые могут там встретиться.
pwdhash=`pwd|md5sum|awk '{print $1}'`

Создадим директорию, в которой будем хранить все наши состояния сериалов, если её еще нет:
test ! -d ~/.serial && mkdir ~/.serial

Определим имя файла, в которое будем записывать:
savefile=~/.serial/$pwdhash

Вот где-то тут меня посетила шальная мысль, что можно использовать полновесную реляционную базу данных вроде sqlite или еще того тяжелее, mysql, но эту мысль я вовремя отогнал, иначе бы вышел большой монстр вместо простой обертки над мплеером.
Теперь о сериализации: как именно хранить данные? Парсить свежепридуманные форматы на языке bash, который предназначается совершенно для других целей, мне совсем не улыбалось, поэтому я просто решил что там будут переменные окружения в таком же sh-формате.
Давайте загрузим файл, если он уже там есть:
if [ -f $savefile ]
then
ready="true"
. $savefile
fi

Так, а какие действия мы можем выполнить с сериалом? Я остановился на таких:
case $1 in
# Запускает следующий эпизод
n|next)
# ...
;;
# Запускает только что просмотренный эпизод снова
s|same)
# ...
;;
# Запускает эпизод по его номеру
e|ep|episode)
# ...
;;
# Устанавливает параметры, с которыми просматривать сериал
set)
# ...
;;
# Просмотр текущего состояния
status|show)
# ...
;;
# И краткая справка, если я что-то вдруг забуду.
*)
echo Unknown command.
echo Commands:
echo next - plays episode next to what you have played before
echo same - plays this episode again
echo show - shows current state
echo episode NN - plays episode NN
echo set var_name value - sets the variable
;;
esac

Приступим к реализации отдельных действий.
Первым делом стоит проверить, настроили ли мы просмотр этого сериала или нет. Так как это действие выполняется почти в каждой команде, я вынес его в функцию, которая смотрит наличие установленной при загрузке параметров переменной, и в случае отсутствия выводит инструкцию, как же это дело настраивается.
function check_ready {
if [ -z "$ready" ]
then
echo This directory is not known to have serials.
echo Use the following command to setup:
echo "$0 set mask \"Movie_name_episode_??_smth.avi\""
exit 1
fi
}

Теперь, собственно, запуск, также отдельной функцией:
function launch {
# ...
}

Сначала заменим вопросы в названии на текущий номер эпизода:
movie="`echo \"$mask\" | sed \"s/??/$episode/g\"`"

С подстановкой у меня возникли проблемы: оказывается, в баше это не так-то просто… Перепробовав много вариантов разной степени извращенности, я остановился на таком, хотя если честно, так и не понял как он работает, но побочный эффект его в том, что нужно экранировать пробелы при задании маски:
if [ "$glob" == "yes" ]
then
movie="$(eval "echo $movie")"
fi

В комментариях можете предложить варианты получше.

Проверим, что файл с полученным названием существует, а если нет, нужно вывалить сообщение и выйти.
test ! -f "$movie" && die Episode $episode not found

Ах да, вот еще одна вспомогательная функция: выводит сообщение и выходит
function die {
echo $@
exit 1
}

Вернемся к реализации функции запуска launch. Сохраним номер последнего проигранного эпизода (а заодно и дату запуска) в файл настроек:
echo episode=$episode "#" at `date` >> $savefile

Выведем сообщение о текущем эпизоде:
echo Playing episode $episode...

И наконец запустим наш плеер с параметрами, файлом и дополнительными аргументами, которые может передать пользователь после указания эпизода
$player $options "$movie" "$@"

Отлично, функция launch готова! Осталось совсем малость: заполнить конструкцию case. Самая простая команда — same:
s|same)
check_ready
shift
launch "$@"
;;

Для просмотра следующего эпизода нужно инкрементировать переменную, но при этом сохранить отбивку нулями сначала. Для этого подошел awk:
n|next)
check_ready
episode=`echo $episode |awk '{printf "%02d",$1+1}'`
shift
launch "$@"
;;

Вот так можно запустить с конкретным эпизодом по номеру:
e|ep|episode)
check_ready
test -z "$2" && die No episode specified
episode=$2
shift
shift
launch "$@"
;;

А теперь нечто совершенно другое — установка переменных:
set)
# Проверим, что нам передали название переменной
test -z "$2" && die Variables: episode mask glob options player
var_name="$2"
# Проверим, что есть хотя бы что-то в значении
test -z "$3" && die No value specified
shift
shift
# И запишем все что есть:
echo "$var_name=\"$@\"" "#" at `date` >> $savefile
;;

Наконец, вывод текущего состояния:
status|show)
check_ready
echo Last played episode $episode
echo Options are $options
echo Savefile is $savefile
echo Mask is \"$mask\"
test -z "$glob" || echo Globbing is set
;;

источник

Цитата:
А еще часто смотрится несколько сериалов параллельно, по мере выхода новых серий. И помнить, на какой серии я остановился в прошлый раз, и с какими параметрами и ключами запускал mplayer, становится затруднительно.
Какой-то слабенький линуксоид - видать с сотрясением. Смотрит сериалы по мере выхода серий но не помнить где остановился в прошлый раз.... на последней серии ты остановился


Комментарии посетителей
[1] 2 3 4

#1. Armanx64

Armanx64
Что-то мне подсказывает, что это уже верх красноглазия. Знаю людей, которые могу делать более юзабельные решения, хоть и в консоли.

#2. bALMER

Вот что значит линукс) если неудобны окошки пользуем консоль. Молодец пареньup

#3. d1337r

И чего в этом пл.хого? Наличие выбора между лёгким путём и сложным -- это пл.хо?

#4. Tiphon

Да не, просто сколько он на такую хуёту времени потратил вначале, сколько потом потратил, описывая хуёту. Отлично, парень, так держать. К старости будешь вспоминать, как круто в молодости под башью писался скрипт для просмотра сериалов и какие сериалы были крутые, не то што шишас...

#5. spoilt

spoilt
Мрак и ужас. Сделал бы уже специальную смотрелку на ncurses и python. Нет, надо долбится с консолью.
И толсто кстати.

#6. bALMER

Tiphon написал:
Да не, просто сколько он на такую хуёту времени потратил вначале, сколько потом потратил, описывая хуёту.
Это его выбор. А чем вы занимаетесь в свободное время? не "хуитой" ли?

#7. Tiphon

Мне кажется, что по его мнению, определенно "хуитой")))))
Нахуё это надо, если есть баш, чтобы писать надстройки для сериалов)))
Шикарно! Спасибо за информацию. Скопипастил в копилочку, как-нибудь организую.

#9. d1337r

bALMER написал:
А чем вы занимаетесь в свободное время?

Это да. По мне, лучше я буду в свободное время заниматься программированием (пусть даже такой хр№ни) (что может вполне дать опыт в собственно программировании), чем всякими MMORPG или другой фигнёй.

#10. d1337r

P.S. Кстати, я как раз в свободное время кое-что пишу для одного сайта.

#11. Plutonium

Автомототроллер написал:

Шикарно! Спасибо за информацию. Скопипастил в копилочку, как-нибудь организую.

профессору Кащенко превед! angry biggrin
Plutonium написал:
профессору Кащенко превед!


Таких не знаю. Это же твой знакомый, вот сам и передавай ему приветы, когда в следующий раз там окажешься.
Автомототроллер написал:
Таких не знаю. Это же твой знакомый, вот сам и передавай ему приветы, когда в следующий раз там окажешься.


Судя вот по этой теме, ты - постоянный клиент этого профессора biggrin

#14. wr224

Автомототроллер написал:
Шикарно! Спасибо за информацию. Скопипастил в копилочку, как-нибудь организую.

Больные лгм на марше biggrin Остается только адреса пробить и вызывать санитаров на дом biggrin
wr224 написал:
Больные лгм на марше biggrin Остается только адреса пробить и вызывать санитаров на дом


Ещё один biggrin Как до зелёных человечков или вирусов, "сканирующих разделы на предмет монтирования в noexec", так все любители. А как до дела - попробовать интересную и полезную вещь, так сразу "кащинка, кащинка". biggrin
Вот ответь мне, мил чоловек, а почему и нет? Почему бы и не попробовать? Или сутками ср#ть на СЛОРе - занятие более достойное, чем поковыряться в системе?

#16. Plutonium

wr224 написал:
Больные лгм на марше biggrin Остается только адреса пробить и вызывать санитаров на дом

up up up biggrin
Автомототроллер написал:
Судя вот по этой теме, ты - постоянный клиент этого профессора

абыдэлса, да? thinking

#17. Plutonium

Автомототроллер написал:
интересную и полезную вещь

ха ха спс, поржал biggrin
Plutonium написал:
абыдэлса, да?


На тебя, что ли? Нет, я на таких - общающихся с зелёными человечками - не обижаюсь. Просто смешно стало, когда ты о Кащенко заговорил. Учитывая твой былинный тред о зелёных человечках, магии, да Деревянных Херах, кому-кому, но только не тебе о Кащенко заговаривать biggrin
Plutonium написал:
ха ха спс, поржал


Да мы уже давно поняли, что ты только на это и способен biggrin
Можешь "ржать" дальше. А я спать пошёл. Привет всей твоей компании - зелёным человечкам, Кащенко и т.д. Нутыпонел.

#20. wr224

Автомототроллер написал:
попробовать интересную и полезную вещь, так сразу "кащинка, кащинка".

Это просто ненужно ни одному нормальному человеку, но ты меня троллер все-равно не поймешь biggrin

#21. hodok78

wr224 написал:
Это просто ненужно ни одному нормальному человеку, но ты меня троллер все-равно не поймешь
Не нужно,но попробовать стоит,хотя бы для того,что бы просто знать.

#22. wr224

hodok78 написал:
Не нужно,но попробовать стоит,хотя бы для того,что бы просто знать.

Если нужно знать, открой мануал по башу и прочитай

#23. Tiphon

Ну вот, с№ч детектед. Пообсуждали тему...

#24. Plutonium

Автомототроллер написал:
Учитывая твой былинный тред о зелёных человечках, магии, да Деревянных Херах

Ты прав, с типами вроде тебя надо разговаривать на уличные темы - о семках, о пиве ... о линуксе biggrin

#25. wr224

Tiphon написал:
Ну вот, с№ч детектед. Пообсуждали тему...

А что тут обсуждать? На голову больной школьник написал какую-то х№рню чтобы аниме свое любимое смотреть и решил вы*нубнуться разместив свое аткрытие в интернетах а другие местные больные его поддержали smile

#26. Plutonium

wr224 написал:
а другие местные больные его поддержали

зато скока лулзов за один вечер, коллега wink

#27. wr224

Plutonium написал:
зато скока лулзов за один вечер, коллега

мне троллер в последнее время вообще доставляет biggrin

#28. hodok78

wr224 написал:
Если нужно знать, открой мануал по башу и прочитай
А руками попробовать?Прочитать и сделать вещи разные.

#29. I_love_Win

Plutonium написал:
зато скока лулзов за один вечер, коллега


И очень они часто обижаются на правду, в частности, когда их называют пенгванутыми wink
wr224 написал:
Это просто ненужно ни одному нормальному человеку

Ваш нормальный человек до сих пор ходить бы не научился, потому что "не нужно"©.

#31. wr224

hodok78 написал:
А руками попробовать?Прочитать и сделать вещи разные.

Ну что я тебе ходок могу еще сказать, попробуй smile
Linups_Troolvalds написал:
Ваш нормальный человек до сих пор ходить бы не научился, потому что "не нужно"©.

Тебе виднее biggrin

#32. hodok78

wr224 написал:
Ну что я тебе ходок могу еще сказать, попробуй
Хорошо!Загоняться специально не буду,но под настроение,почему и нет?smile

#33. pavel2403

pavel2403
hodok78 написал:
Хорошо!Загоняться специально не буду,но под настроение,почему и нет?
Стой, Андрюха, остановись подумай, от этого могут быть красные глаза...sad

#34. pavel2403

pavel2403
hodok78 написал:
Хорошо!Загоняться специально не буду,но под настроение,почему и нет?

Может лучше под настроение и под пиво осилить написание собственной конфы на 1С 8.1??? Это вроде как полезней, не?

#35. hodok78

pavel2403 написал:
Стой, Андрюха, остановись подумай, от этого могут быть красные глаза...
Красные глаза не страшно,я привык!biggrin
pavel2403 написал:
Может лучше под настроение и под пиво осилить написание собственной конфы на 1С 8.1??? Это вроде как полезней, не?
Вот здесь ты прав.Надо достать учебник по программированию 1С 8 и попробовать что нибудь наваять.Помогать будешь?wink
Svart Testare
-ass всё красочно объясняет biggrin
Svart Testare написал:
-ass всё красочно объясняет

Кому-то объясняют, а кому-то красиво субтитры показывают. А то еще бывает, некоторые школия на слова "мультиканальный" или "персональный" болезненно реагируют. Вы не?

#38. BACKFIRE

Очередное не нужное выеб№нство.
Линукс - мерзкая финская месть миру за вторую мировую biggrin
BACKFIRE написал:

Очередное не нужное выеб№нство.

Ненужное, конечно ненужное.
BACKFIRE написал:
Линукс - мерзкая финская месть миру за вторую мировую

Точно! Вот и мстительные японцы из префектуря Ямагата тоже подтянулись. Ну что с них взять, камикадзе же.

#40. dimitrio

Ну и что тут такого? Обычный скриптик, и сотни строк не наберётся. В чём новость?
Цитата:
Поэтому хранить будем в домашней папке

Бабушка-Бетмен не поняла, зачем?
[1] 2 3 4

Просмотров: 5722