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

Автор Тема: Cli-Gui утилита для yt-dlp на yad с удобным выбором списка формата.  (Прочитано 1432 раз)

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

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Написал с помощью чата GPT4 , скрипт который реализует CLI-GUI  то есть смешанную интерактивность для скачивания видео аудио по url спомощью утилиты yt-dlp,  для выбора формата использована удивительная  утилита, peco. Для выбора места скачивания , yad. Вот код скрипта.
зависимости:
xsel
peco
yad
-------------------------------------------------------------------------------------------------------------------------------------
#чуть ниже в этом же сообщении есть скрипт который использует интерактивный режим yt-dlp, предлагаю вам брать его, а этот скрипт у меня, и вот у  krasnyh работает, но избыточен по коду
-------------------------------------------------------------------------------------------------------------------------------------
Код
#!/bin/bash

# Получаем URL из буфера обмена
url=$(xsel -ob)

# Получаем список доступных форматов для видео на YouTube
formats=$(yt-dlp -F "$url")

# Фильтруем список через peco и сохраняем выбранный формат в переменную
selected_format=$(echo "$formats" | peco)

# Выводим выбранный формат и сохраняем первые 3 символа в переменную
#echo "Выбранный формат: $selected_format"
down_f=$(echo "$selected_format" | cut -c -3)

# Выводим первые 3 символа выбранного формата
#echo "Первые 3 символа выбранного формата: $down_f"

# Отображаем диалоговое окно выбора каталога с помощью yad
save_dir=$(yad --file --directory --title="Выберите каталог для сохранения")

# Если каталог не был выбран, выходим из скрипта
if [ -z "$save_dir" ]; then
  exit
fi

# Запускаем yt-dlp для скачивания файла в выбранный каталог с выбранным форматом

yt-dlp -f "$down_f" -o "$save_dir/%(title)s.%(ext)s" "$url"

# Оповещаем о завершении загрузки
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
echo "Загрузка завершена."
sleep 2
как использовать, скопировать в буфер обмена url ,  запустить скрипт, в терминале выдадут список форматов, первая строка будет подкрашена курсором утилиты peco, с помощью клавиш курсора, выбираем интересующий нас формат, жмем ввод, появится выведеное с помошью yad окно выбора каталога сохранения, выбираем каталог, и жмём опять ввод, пойдет далее скачивание файла в каталог.

------------------------------------------------------------------------------------------------
вот конечный вариант скрипта который предлагаю брать если нужен
------------------------------------------------------------------------------------------------
не забыть перед запуском скрипта скопировать url видео
 в буфер обмена
------------------------------------------------------------------------------------------------
Код
#!/bin/bash

# Получаем URL из буфера обмена с помощью xsel
url=$(xsel -ob)

# Задаем каталог для сохранения загруженных файлов
download_dir="$HOME/yout"

# Запускаем yt-dlp с опцией -f- и передаем ему URL и номер формата для загрузки
yt-dlp -f- "$url" -o "$download_dir/%(title)s.%(ext)s"

# Сообщаем пользователю о завершении загрузки
echo "Загрузка завершена. Файлы сохранены в каталоге $download_dir"

« Последнее редактирование: 26 Апрель 2023, 19:35:02 от totiks2012 »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5336
  • Репутация: +139/-1
Похоже забыл $down_f, которая должна быть вместо $selected_format в итоговой строке.
Да, скрипт все равно рабочий, но...  :) Отсюда и проблемы с кавычками.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Похоже забыл $down_f, которая должна быть вместо $selected_format
абсолютно верно, и я тоже пропустил эту ошибку, и причём ошибка грубая, исправил теперь вывод чистый без ошибок, мне скрипт очень понравился, все gui которые нашёл используют java, QT, wxvidgets, некоторые работают слегка быстрей,  этот скрипт же организует удобство чтоб избавить от манипуляций от открытия терминала в нужном каталоге, просмотре списков форматов ,выбора аргумента, и передаче его для скачивания, спасибо вам за помощь.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33989
  • Репутация: +231/-0
    • PuppyRus-A
все gui которые нашёл используют java, QT, wxvidgets
https://github.com/BKSalman/ytdlp-gui/releases смотрели?
с помощью чата GPT4
Интересно было бы узнать куда заходили, какие запросы делали. Комментарии в скрипте ваши или гпт?

peco и yad - какая-то стремная смесь консоли и GUI. это гпт так решил?
Тогда уж вместо peco - тоже yad.... Например с моей обвязкой вокруг yad - ntf :
Код
selected_format="$(ntf -l "`echo "$formats" |tail -n+7  |tr "|" "-" |tr "\n" "|"`")" 
И чтобы не нажечься на пробелах - используйте кавычки при определении переменных a="$a"  и при их использовании "$a"
« Последнее редактирование: 24 Апрель 2023, 17:33:03 от sfs »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Комментарии в скрипте ваши или гпт?
все коменты гпт. Смесь гуя, с кли, я так решил, как компромисс, директорию мог бы выбрать тем же peco, но тогда терял возможность интерактивности создания нового каталога, и указания что могу сохранять в него, стремно, дык по началу может и стремная смесь, а по мне удобно, не берусь ничего защищать, либо навязывать, peco я утром случайно нашел, и возрадовался очень дельная штука, только из-за peco опубликовал скрипт , очень дельная утилита я про peco, она имеет встроеный фильтр  если в строке QUERY ввести например 720p то peco выведет строки содержащие только этот формат, то есть сценарий использование скрипта благодаря peco может быть шире. Можно вообще назначить только одну директорию в переменой, для скачивания файлов, и искать всё там, но я чаще скачиваю только аудиотреки, иногда когда какой нить интересный проэкт по электронике хочется сохранить то скачиваю и видео, и потому решил так.

upd: 
Например с моей обвязкой вокруг yad - ntf :
  вот я этого никак не осилил, потому что до этого скрипт был полностью на yad , я просто не справился, а потом нашёл peco...
« Последнее редактирование: 24 Апрель 2023, 18:55:56 от totiks2012 »

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2550
  • Репутация: +33/-0
totiks2012:
см.
- добавил "обработку имениФайла" (для "четкости", ранее руками переименовывал)
- то для себя, но, имхо, удобно
-------------
зы:
"филосовски" пришел к практическому приоритету 'primary-буфера' (если для горячеклавиш)
зызы:
не назольничаю )
Gr4D, Grub2; HP Mini 210 VT - Intel Atom N470  @ 1.83GHz, Intel GMA3150, RAM=2 ГБ ;
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы

Интересно было бы узнать куда заходили,
https://chat.openai.com/  а вот запросы и ответы, зачем эту стыдобу на люди выносить, как кодер я даже на уровень любителя не тяну.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5336
  • Репутация: +139/-1
totiks2012:
см.
- добавил "обработку имениФайла" (для "четкости", ранее руками переименовывал)
Если нужно заменить пробелы подчеркиваниями, а так же добавить код скачиваемого формата, то:
Код
$ yt-dlp -f 134+139 'https://youtu.be/emzsexkpVj4' -o "%(title)s_[%(id)s]_%(format_id)s.%(ext)s" --restrict-filenames

$ ls *.mp4
'Iceland_HDR_12K_Dolby_Vision_[emzsexkpVj4]_134+139.mp4'
Больше примеров выходного шаблона здесь.


Также, кто не знал, yt-dlp имеет встроенный механизм интерактивного выбора формата. Т.е. исполняем команду ниже, появляется таблица, листаем и внизу вводим цифры, например 134+139.
Цитата
yt-dlp -f- "ссылка"

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Также, кто не знал, yt-dlp имеет встроенный механизм интерактивного выбора формата.

Всё понял действительно есть интерактивный режим, это всё меняет.
Скрипт не нужен получается... Но зато я хорошо провёл время, спасибо еще раз!
« Последнее редактирование: 25 Апрель 2023, 10:55:04 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Также, кто не знал, yt-dlp имеет встроенный механизм интерактивного выбора формата
чтоб тема стала завершённой вот код для этого, выбраный файл сохраняется в каталоге ~/yout, скрипту нужен xsel.
Код:
Код
#!/bin/bash

# Получаем URL из буфера обмена с помощью xsel
url=$(xsel -ob)

# Задаем каталог для сохранения загруженных файлов
download_dir="$HOME/yout"

# Запускаем yt-dlp с опцией -f- и передаем ему URL и номер формата для загрузки
yt-dlp -f- "$url" -o "$download_dir/%(title)s.%(ext)s"

# Сообщаем пользователю о завершении загрузки
echo "Загрузка завершена. Файлы сохранены в каталоге $download_dir"

очень люблю когда простым скриптом получаю незамудреный опыт использования, это действительно удобно иду вешать этот скрипт на горячую клавишу как посоветовал knn , спасибо еще раз всем!
« Последнее редактирование: 25 Апрель 2023, 11:44:48 от totiks2012 »

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1718
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
А у меня все повисло. Перезапустил иксы, peco закомментил. Сработало. Запускал тычком мыши
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
А у меня все повисло. Перезапустил иксы, peco закомментил. Сработало. Запускал тычком мыши
если по первому скрипту, странно... на debian 11 и на MiniOS что по сути тот же  debian 11, peco работает, я им таки воспользовался, peco оказывается можно прекрасно использовать для поиска строк  со смешаным критерием поиска, я например его использую как поисковик по базе с ценниками. Попробуйте запустить скрипт с peco в терминале в режиме отладки bash -x script.sh и тогда возможно получится отловить причину такого поведения, если конечно иксы не зависнут, а так первый скрипт что в шапке не нужен , если нужен скрипт возьмите тот что в конце этой статьи.

подвис иксов  мог случится  если вы забыли скопировать url в буфер, и запустили скрипт двойным кликом по скрипту, и в этом момент если бы скрипт выводился бы в терминале, то в рекурсивном цикле(от yt-dlp)бы выводилось сообщение об ошибке, но так как скрипт был запущен двойным кликом то терминал был запущен в фоне, и это возможно повлияло на иксы, ну тут я уже гадаю что могло случится, чтоб отловить работает в вашей системе peco , можете в терминале дать вот эту команду ls -1 -F | peco , должен вывестись список вашего домашнего каталога через peco, клавишами курсора можно двигатся вниз вверх.

----------------------------------------------------------------------------------
upd:Если кому нужно берите второй скрипт из шапки темы.
« Последнее редактирование: 26 Апрель 2023, 19:52:51 от totiks2012 »

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1718
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
если вы забыли скопировать url в буфер, и запустили скрипт двойным кликом по скрипту
Так и было. А щелчок одинарный - у меня jwm и по стандарту все.
Peco работает. Все норм.
Компьютер имеет то преимущество перед мозгом, что им пользуются.