Суп, /s. Хочу научить mpv подгружать субтитры из поддиректорий. При запуске ему можно передать относительный путь к папкам вида: --sub-paths=папкассабами1:папкас_сабами_2 и он сам найдет там субтитры с подходящим именем. Слепил такую вот хауту: #!/bin/bash `` for entry in ** do if [ -d "$entry" ];then array[ $i ]="$entry" let ++i fi done `` subpaths=$(IFS=$':'; echo "${array[*]}") mpv --sub-paths "$subpaths" "$1" И это даже работает, но только при запуске из терминала. А вот если в pсmanfm настроить открытие видеофайлов этим скриптом, то сабы почему-то не загружается. Была мысля, что рабочая директория неправильная, но cd "$(dirname "$1")" добавленный в начало не помогает. В чём может быть дело?
Суп, /s. Хочу научить mpv подгружать субтитры из поддиректорий. При запуске ему можно передать относительный путь к папкам вида: --sub-paths=папкассабами1:папкас_сабами_2 и он сам найдет там субтитры с подходящим именем. Слепил такую вот хауту:
#!/bin/bash `` for entry in ** do if [ -d "$entry" ];then array[ $i ]="$entry" let ++i fi done `` subpaths=$(IFS=$':'; echo "${array[*]}") mpv --sub-paths "$subpaths" "$1"
#!/bin/bash
for entry in **
do
if [ -d "$entry" ];then
array[ $i ]="$entry"
let ++i
fi
done
subpaths=$(IFS=$':'; echo "${array[*]}")
mpv --sub-paths "$subpaths" "$1"
И это даже работает, но только при запуске из терминала. А вот если в pсmanfm настроить открытие видеофайлов этим скриптом, то сабы почему-то не загружается. Была мысля, что рабочая директория неправильная, но cd "$(dirname "$1")" добавленный в начало не помогает. В чём может быть дело?
>>180646 Разметка немного поломалась. Двойных апострофов в коде, разумеется, быть не должно.
.config/mpv/mpv.conf sub-paths="СУБТИТРЫ:МОИСУБТИТРЫ:КЛЁВЫЕ СУБТИТРЫ:СУБТИТРЫ ОТ VASYAN-TEAM:ETC:ETC:ETC"
.config/mpv/mpv.conf
sub-paths="СУБТИТРЫ:МОИСУБТИТРЫ:КЛЁВЫЕ СУБТИТРЫ:СУБТИТРЫ ОТ VASYAN-TEAM:ETC:ETC:ETC"
>>180648 $sub-paths .= q(:.:..);
>>180648 >>180651 Если бы название директорий было типовым, то можно было, но их называют как угодно. Посмотрел в папки с анимой и нашёл там такие, например, варианты: SUB sub Rus.sub RUS Subs ass srt Russian Subtitles [Willy & Hollow] Субтитры от [Glen or Glenda & Drakonika & laci] RUS Sub от Dreamers Team Rus subs [Dusker & Тюлень] [YakuSub Studio] Rinne-subs Timecraft & GMC Rus Subs/toph Rus Subs/Невафильм sub/AniPlay sub/nnm-club Если это делать вручную, то придётся почти для каждого тайтла sub-paths дополнять. Не хотет.
>>180648 >>180651 Если бы название директорий было типовым, то можно было, но их называют как угодно. Посмотрел в папки с анимой и нашёл там такие, например, варианты:
SUB sub Rus.sub RUS Subs ass srt Russian Subtitles [Willy & Hollow] Субтитры от [Glen or Glenda & Drakonika & laci] RUS Sub от Dreamers Team Rus subs [Dusker & Тюлень] [YakuSub Studio] Rinne-subs Timecraft & GMC Rus Subs/toph Rus Subs/Невафильм sub/AniPlay sub/nnm-club
SUB
sub
Rus.sub
RUS Subs
ass srt
Russian Subtitles [Willy & Hollow]
Субтитры от [Glen or Glenda & Drakonika & laci]
RUS Sub от Dreamers Team
Rus subs [Dusker & Тюлень]
[YakuSub Studio]
Rinne-subs
Timecraft & GMC
Rus Subs/toph
Rus Subs/Невафильм
sub/AniPlay
sub/nnm-club
Если это делать вручную, то придётся почти для каждого тайтла sub-paths дополнять. Не хотет.
>>180654 хочешь сказать, что во всех комплектах сабов названия совпадают с названиями видеофайлов?
>>180655 Это уже другая проблема. Но если сабы идут в комплекте (анима с рутрекера, например), то имена файлов обычно приведены в соответствие.
В любом случае, самый простой способ получить список поддиректорий в виде subdir1:subdir2: , имхо, выглядит как-то так find . -maxdepth 1 -type d -printf "%p:" запихать вызов subshell'a в mpv.conf, к сожалению, не удалось, так что реализовать твой, имхо неюзабельный функционал, можно alias'ами alias smpv='mpv --sub-paths=$(find . -type d -printf "%p:")' или если хочешь проверять поддиректории только на один уровень alias smpv='mpv --sub-paths=$(find . -maxdepth 1 -type d -printf "%p:")'
В любом случае, самый простой способ получить список поддиректорий в виде subdir1:subdir2: , имхо, выглядит как-то так find . -maxdepth 1 -type d -printf "%p:"
find . -maxdepth 1 -type d -printf "%p:"
запихать вызов subshell'a в mpv.conf, к сожалению, не удалось, так что реализовать твой, имхо неюзабельный функционал, можно alias'ами alias smpv='mpv --sub-paths=$(find . -type d -printf "%p:")' или если хочешь проверять поддиректории только на один уровень alias smpv='mpv --sub-paths=$(find . -maxdepth 1 -type d -printf "%p:")'
alias smpv='mpv --sub-paths=$(find . -type d -printf "%p:")'
alias smpv='mpv --sub-paths=$(find . -maxdepth 1 -type d -printf "%p:")'
>>180658 Ничего себе, одной строчкой! Только вывод финда в кавычках подать надо, а то путь ломается пробелами: alias smpv='mpv --sub-paths="$(find . -type d -printf "%p:")"' И точки ещё эти, я из-за них find и не стал использовать, так как не разобрался, как их убрать. Бака же. Но оно оказывается и с точками работает, разве что субтитры в одной директории с видеофайлом загружаются дважды из-за .: Но таки алиас ведь будет работать только в консоли? Или есть способ его pcmanfm`у подсунуть?
>>180658 Ничего себе, одной строчкой! Только вывод финда в кавычках подать надо, а то путь ломается пробелами: alias smpv='mpv --sub-paths="$(find . -type d -printf "%p:")"' И точки ещё эти, я из-за них find и не стал использовать, так как не разобрался, как их убрать. Бака же. Но оно оказывается и с точками работает, разве что субтитры в одной директории с видеофайлом загружаются дважды из-за .:
alias smpv='mpv --sub-paths="$(find . -type d -printf "%p:")"'
.:
Но таки алиас ведь будет работать только в консоли? Или есть способ его pcmanfm`у подсунуть?
>>180664 Т.е. как обычный баш-скрипт? #!/bin/bash mpv --sub-paths="$(find . -type d -printf "%p:")" "$1" Так? Положил в /usr/local/bin. В терминале работает, а через pcmanfm почему-то даже окно mpv не открывается.
>>180664 Т.е. как обычный баш-скрипт?
#!/bin/bash mpv --sub-paths="$(find . -type d -printf "%p:")" "$1"
mpv --sub-paths="$(find . -type d -printf "%p:")" "$1"
Так? Положил в /usr/local/bin. В терминале работает, а через pcmanfm почему-то даже окно mpv не открывается.
>>180663 вместо alias'a можно положить одноименный скрипт из двух строчек в одной из директорий $path, а вместо . нужно брать dirname твоего видеофайла (что-то типа $(dirname $1))
.
dirname
$(dirname $1)
>>180665 Видимо проблема в том, что я не знаю что такое pcmanfm
>>180656 алгоритм Яро-Винклера должен с ней справиться, правда, возможно придётся разбить название на слова
>>180667 Таки проблема в pcmanfm. Накатил thunar, в нём всё работает. Ну, можно и на thunar переползти, я не против. Он почти такой же. А вот $(dirname $1) оказался не нужен, с ним почему-то не фурычит. Остался только один момент. Можно ли из вывода find: .:./Sub1:./Sub2:./Sub3: убрать первую точку, указывающую на текущую директорию? >>180668 Эта задача баке не по зубам. Пойду лучше мороженку наверну. Кажется, снаружи сегодня тепло.
>>180667 Таки проблема в pcmanfm. Накатил thunar, в нём всё работает. Ну, можно и на thunar переползти, я не против. Он почти такой же. А вот $(dirname $1) оказался не нужен, с ним почему-то не фурычит.
Остался только один момент. Можно ли из вывода find: .:./Sub1:./Sub2:./Sub3: убрать первую точку, указывающую на текущую директорию?
.:./Sub1:./Sub2:./Sub3:
>>180668 Эта задача баке не по зубам. Пойду лучше мороженку наверну. Кажется, снаружи сегодня тепло.
>>180669 попробуй добавить к списку аргументов find -mindepth 1 c: ban
-mindepth 1
>>180670 Оказывается, для -printf есть директива %P, не выводящая точек. В итоге получилось так: mpv --sub-paths="$(find . -mindepth 1 -maxdepth 2 -type d -printf "%P:")" "$1" Спасибо за помощь!
>>180670 Оказывается, для -printf есть директива %P, не выводящая точек. В итоге получилось так: mpv --sub-paths="$(find . -mindepth 1 -maxdepth 2 -type d -printf "%P:")" "$1"
%P
mpv --sub-paths="$(find . -mindepth 1 -maxdepth 2 -type d -printf "%P:")" "$1"
Спасибо за помощь!
- wahaba + wakaba 3.0.9 + futaba + futallaby -