Сайт | Скачать | Видео | Wiki

Автор Тема: Abook_2_mpv консольный плеер для аудиокниг.  (Прочитано 908 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Доброго дня всем ! Долгое время лелеял мечту о простеньком консольном плеере для аудиокниг. Плееров способных запоминать последний воспроизведенный трек, да еще и место откуда прервалось воспроизведение, с использованием  GUI достаточно, Audacious, Sayonara, Deadbeef, Smplayer , это те которые знаю и использовал. Из консольных же я знаю лишь moc , cmus , и сколько не крутил их , сколько не вчитывался в help-ы и документацию, так и не нашел как задействовать функцию  воспроизводить при перезапуске ,  последний  трек и место , особенно понравился moc простое и понятное управление, но я не смог найти у него эту функцию. Потому созрел написать свой консольный плеер для аудиокниг. Долго рассусоливать не буду так что привожу код Abook_2_mpv.
--------------------------
обновление: Добил скрипт, вот финал , качать тут https://disk.yandex.ru/d/yoo_40kyKuw64A
удалил строку которая переносит файлы из подкаталогов, для этого плеера следует подготавливать файлы например, склеить , скрипт который делает это берет из подкаталогов и склеивает в один общий mp3,  в архиве оба скрипта.

обновление_2: в архиве теперь скрипт, в котором исправлена еще одна найденая ошибка(при входе в опцию выбора трека, при отказе от выбора трека , и нажатии на esq , вместо того чтоб выходил в общее меню. всё равно воспроизводил первый трек, теперь выходит) ,кроме того изменил скрипт для склеивания mp3 , назвал sinia_izolenta_3.sh, который умеет после того как указать путь к каталогу, внутри которого требуется
объединить все MP3 файлы в один. После ввода пути
 скрипт создаст временный каталог, объединит MP3 файлы без преобразования качества, клеит с качеством исходного,
 в него и переместит получившийся файл обратно в выбранный каталог.
« Последнее редактирование: 19 Декабрь 2023, 21:43:49 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Abook_2_mpv консольный плеер для аудиокниг.
« Ответ #1 : 23 Август 2023, 10:48:33 »
Как  работать со скриптом .
В каталоге ~/Music необходимо создать новый каталог с именем <pl> , далее в него скопировать каталог с аудиокнигой, например каталог с именем  <С. Лем Звёздные дневники Йона Тихого>, важное замечание этот каталог должен содержать только треки, если этот каталог содержит подкаталоги то необходимо произвести некоторые действия чтоб из подкаталогов эти треки  переместить в текущий каталог с аудиокнигой у нас в примере каталог с именем  <С. Лем Звёздные дневники Йона Тихого>, это очень просто сделать, ибо включено в функционал скрипта, как это сделать я расскажу чуть ниже.
(в версии скрипта Abook_2_mpv_totiks_v09_07_fin.sh  это поведение скрипта изменено и теперь он переносит треки из подкаталога если нужно сам, берите эту версию скрипта)
 После этих действий, запускаем скрипт, и мы попадаем в первую локацию скрипта, нас тут встретят строка поиска peco и три интерактивные строки:
Продолжить                                                                     
Выйти
Перенести файлы из подкат. в текущий каталог
Опишу каждую из них
1. Продолжить
Из названия этой строки ясно что если выбрать эту строку, то скрипт продолжит свою работу. И перейдет во вторую локацию.

2. Выйти
Тут всё ясно, это пункт для выхода из программы.

3.Перенести файлы из подкат. в текущий каталог
Этот пункт меню нужен для переноса треков из подкаталогов в текущий каталог .

Перехожу к описанию второй локации которая начнется если выбрать из первой локации, пункт меню <Продолжить>.
Вторая локация нам предложит следующий пункты меню:
Продолжить прослушивание трека                                                 
Выбрать трек и слушать
Стереть историю

 1.Продолжить прослушивание трека
При выборе этого пункта меню , mpv будет воспроизводить треки  по плейлисту, если запущен  первый раз , то будет воспроизводить плейлист от первого трека к последнему, с запоминанием места и трека который был воспроизведен при выходе. По идее скрипт мог состоять только из этого кода, но мне хотелось больше контроля и функционала, рассказываю дальше.

2.Выбрать трек и слушать
Слушая аудиокнигу, бывает ситуации когда вы хотите вернутся назад на нужный вам трек, этот пункт меню позволяет выбрать нужный трек, и проигрывать дальше по плейлисту, история прослушивания перепишется от выбранного трека и далее.

3.Стереть историю
Обнуляет историю прослушивания,позволяя слушать книгу с самого начала.
Возможно этот пункт меню избыточен и его надлежит убрать. Ибо перекрывается функционалом пункта  2.Выбрать трек и слушать.

Описание скрипта закончено.

По скрипту надеюсь будет обратная реакция, может у кого новые идеи будут, ибо у меня они исчерпались. По поводу почему функционал  пункта 3.Перенести файлы из подкат. в текущий каталог, из первой локации не внедрил в автоматическом режиме, всё потому что затирался каталог с файлом сохранения позиций, и только сегодня утром я понял что этот каталог можно было исключить из затирания, в общем скрипт будет улучшаться.
А пока жду тестов и отзывов.
« Последнее редактирование: 24 Август 2023, 08:48:02 от totiks2012 »

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1718
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re: Abook_2_mpv консольный плеер для аудиокниг.
« Ответ #2 : 23 Август 2023, 13:06:51 »
Вы полностью решили в консоль переехать?)
Плюсую

P.S. Кроме того, мне нравится этот код
« Последнее редактирование: 23 Август 2023, 13:09:03 от imp »
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Abook_2_mpv консольный плеер для аудиокниг.
« Ответ #3 : 23 Август 2023, 16:10:25 »
Вы полностью решили в консоль переехать?)
Плюсую

P.S. Кроме того, мне нравится этот код
(... смущено ) Спасибо!
Сегодня решил проблему с переносом  треков из подкаталогов в текущий, скрипт улучшил, лишние пункты убрал. Пока что в процессе теста чтоб отловить всех муравьёв... возможно вечером ,крайний ,завтра выложу .
« Последнее редактирование: 23 Август 2023, 16:12:26 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Abook_2_mpv консольный плеер для аудиокниг.
« Ответ #4 : 24 Август 2023, 08:41:22 »
Добил скрипт, вот финал качать тут https://disk.yandex.ru/d/4hAmN9WN6EqIdQ

---------------------------------
в этом коде есть баг , исправленный код в ответах ниже
---------------------------------
что изменил:
эту версию скрипта специально оставил для изучения , строка
find . -mindepth 1 -type d -not -name "W_L" -exec sh -c 'mv -v "$0"/* "$PWD" && rm -r "$0"' {} \;
оказалось вредной по сути она проявила уязвимость окружения termux, уявимость проявляется если эта строка начинает работать с расшареным каталогом,вне home каталога в домашнем каталоге телефона, эфект бомбический, хомяка вывернуло на изнанку, то есть строка вывела из всех подкаталогов все файлы в хомяк ???
---------------------------------------------------------------------------------------
1. автоматизировал перенос треков из подкаталогов в текущий---больше никогда так делать не буду.
2. убрал лишний пункт сброса истории треков, теперь достаточно выбрать 1 трек аудиокниги, и это приведет к той же ситуации что мы слушаем книгу заново.
-------------------------------------------------
этот  код не брать! Abook_2_mpv_totiks_v09_07_fin.sh ,в заголовке исправленый v09_09
если удалить вышеобозначеную строку код будет работать исправно и безопасно.
по сути пока строка работала с указанным каталогом в хомяке termux, проблем не было, но после шальной мысли перенести плейлист  с файлами в расшаренный для termux каталог в пространство пользователя телефона, делал для удобства, чтоб был доступ из файлового менеджера андроид, то есть вне хомякка termux, вот тут бомба и взорвалась, кто найдёт это ,и прочитает, знатно посмеётся, я себе обеспечил веселье на весь вечер,пока всё восстанавливал, это уж точно.
-------------------------------------------------
Код
#!/bin/bash
#set -x
while true; do
selected_option=$(echo -e "Продолжить\nВыйти" | peco --prompt "Продолжим работу в программе? ")
case "$selected_option" in
     "Выйти")
     break
     ;;
     "Продолжить")
selected_option=$(echo -e "Продолжить прослушивание трека\nВыбрать трек и слушать" | peco --prompt "Выберите действие: ")


case "$selected_option" in
    "Выбрать трек и слушать")
     selected_dir=$(find $HOME/Music/pl -mindepth 1 -maxdepth 1 -type d ! -name "W_L" | grep -v '/\..*' | xargs -I {} basename {} | peco)
     cd $HOME/Music/pl/"$selected_dir"
     rm -r ./W_L/
     mkdir ./W_L/
     #пернос треков из подкаталогов в текущий
     
     #find . -mindepth 1 -type d -not -name "W_L" -exec sh -c 'mv -v "$0"/* "$PWD" && rm -r "$0"' {} \; #-строка ой не хорошая никогда так не делайте
# Получаем список треков в текущей директории
tracks=$(ls | grep -E '\.mp3$|\.flac$')
#tracks=$(find ./ -type f \( -name "*.mp3" -o -name "*.flac" \) -print | sort)


# Используем Peco для выбора трека
selected_track=$(echo "$tracks" | peco --prompt "Выберите трек: ")

# Создаем плейлист из всех треков, начиная с выбранного трека
playlist=$(echo "$tracks" | awk -v selected="$selected_track" '{if ($0 == selected) selected_found=1} {if (selected_found) print; if (!$0 ~ selected) print}' | xargs -0 printf "%s\n" | tr '\0' '\n')
echo "$playlist" >./pl.txt
# Передаем выбранный трек в mpv для воспроизведения
     mpv --no-video --save-position-on-quit --watch-later-directory=./W_L --playlist="pl.txt"

    ;;
    "Продолжить прослушивание трека")
        # Ваш скрипт для слушания
       
        selected_dir=$(find $HOME/Music/pl -mindepth 1 -maxdepth 1 -type d ! -name "W_L" | grep -v '/\..*' | xargs -I {} basename {} | peco)
        cd $HOME/Music/pl/"$selected_dir"
        mkdir ./W_L
        #пернос треков из подкаталогов в текущий
        #find . -mindepth 1 -type d -not -name "W_L" -exec sh -c 'mv -v "$0"/* "$PWD" && rm -r "$0"' {} \; -строка ой не хорошая никогда так не делайте
        if [ -z "$playlist_file" ]; then
        playlist_file="$PWD/playlist.txt"
        find "$PWD" -type f '(' -iname '*.mp3' -o -iname '*.flac' ')' | sort > "$playlist_file"
        fi

        mpv --no-video --save-position-on-quit --watch-later-directory=./W_L --playlist="playlist.txt"
        ;;

esac
     ;; 
esac
 done
« Последнее редактирование: 14 Декабрь 2023, 09:56:18 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Abook_2_mpv консольный плеер для аудиокниг.
« Ответ #5 : 25 Август 2023, 09:51:58 »
 нашёл баг в скрипте под версией v09_07, если зайти в пункт меню <выбрать трек и слушать> и не выбрать каталог с аудиокнигой и после этого нажать на esc , то скрипт перенесет треки из первого каталога по списку в каталог pl, если не делать этого а последовательно идти по логике скрипта, то есть выбрать каталог с аудиокнигой, то скрипт  отработает как нужно, и начнет воспроизведение трека, как исправить поведение это пока , сижу чешу репу, пока смирился  и использую скрипт таким, со временем буду тихо искать решение.

upd: а пока что если этот баг покажется критическим, то можете взять первый вариант скрипта, но перенос треков  в полуавтоматическом режиме, то есть эту опцию придется выбрать из пункта меню.
« Последнее редактирование: 27 Август 2023, 17:19:53 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Abook_2_mpv консольный плеер для аудиокниг.
« Ответ #6 : 27 Август 2023, 10:30:46 »
 Баг с подкаталогами исправил, вот финал v09_09 работы над скриптом
ссылка
------------
 https://disk.yandex.ru/d/EZxEgjt7OSLhGA
------------
внедрил проверку на выбранное пустое значение selected_dir , при выбранном пустом значении производится выход из текущего блока кода с помощью команды continue.
« Последнее редактирование: 27 Август 2023, 17:33:10 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Abook_2_mpv консольный плеер для аудиокниг.
« Ответ #7 : 27 Август 2023, 11:22:25 »
а вот и скрины  работы программы на телефоне с android через termux. Вставляю внешние  ссылки на изображения чтоб не засорять форум  фоточками
скрин 1  https://ibb.co/z6y0Cx1
скрин 2  https://ibb.co/w774T9M
скрин 3  https://ibb.co/JdHP9Kf
скрин 4  https://ibb.co/QjXWrH4
скрин 5  https://ibb.co/LzvTR3X

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Abook_2_mpv консольный плеер для аудиокниг.
« Ответ #8 : 13 Декабрь 2023, 20:27:05 »
upd: а пока что если этот баг покажется критическим, то можете взять первый вариант скрипта, но перенос треков  в полуавтоматическом режиме, то есть эту опцию придется выбрать из пункта меню.
мдаа всё таки и себе и другим посоветую избегать практики манипуляций с файловой системой, переносы файлов всякие,сегодня на телефоне в домашнем каталоге termux, поменял путь на расшареный каталог(более удобный доступ к файлам из плейлиста), так скрипт странно отреагировал на это, он взял и перенес из всех подкаталогов все файлы в хомяк, получилась знатная каша, пришлось переустановить termux , код отвечающий за пернос файлов из подкаталогов в обший закоментирую, проблему треками в подкаталогах думаю решить их обьединением в один большой трек, для этого напишу скрипт, который вскорем опубликую тут. И это надеюсь этот прикол ни у кого пока не произошёл, я уже второй раз нарываюсь на эту бомбу, если у кого взорвалась народ мои извинения, а мне бегом коментить взрывопасную строку!!!

upd:в архиве в топике темы, скрипт обьединяющий все mp3 из подкаталогов в один(такие аудиокниги бывают особенно стянутые с трекера) , на днях обновлю архив, в коде плеера нашел и исправил еще одну ошибку, кроме того изменил код программы для склеивания, вместо ffmpeg применил cat, что знатно ускоряет процесс склеивания.
------- в топике темы поместил
обновление_2: в архиве теперь скрипт, в котором исправлена еще одна найденая ошибка ,кроме того изменил скрипт для склеивания mp3 , назвал sinia_izolenta_3.sh, который умеет после того как указать путь к каталогу, внутри которого требуется
объединить все MP3 файлы в один. После ввода пути к каталогу в подкаталогах которого mp3,
 скрипт создаст временный каталог, объединит MP3 файлы без преобразования качества, клеит с качеством исходного, в него и переместит получившийся файл обратно в выбранный каталог.
« Последнее редактирование: 19 Декабрь 2023, 21:30:50 от totiks2012 »