LINUX.ORG.RU

Как с помощью yt-dlp скачивать музыку с Youtube music сразу с метаданными о названии трека, альбома, имени исполнителя?

 


3

2

Можно ли это как-то сделать? можно ли как-то сделать чтобы обложка автоматически в внутри mp3 была?



Последнее исправление: vetyna (всего исправлений: 1)

как обложку конвертировать в 500x500

convert –help

Советуют выше использовать внешние приложения, но на самом деле yt-dlp, как многоцелевой комбайн, сам способен на многое.
Пример обрезки обложки из-под yt-dlp:

$ yt-dlp  -f ba -x --audio-quality 0 --add-metadata --embed-thumbnail --convert-thumbnails jpg --exec-before-download "ffmpeg -i %(thumbnails.-1.filepath)q -vf crop=\"'if(gt(ih,iw),iw,ih)':'if(gt(iw,ih),ih,iw)'\" _%(thumbnails.-1.filepath)q" --exec-before-download "rm %(thumbnails.-1.filepath)q" --exec-before-download "mv _%(thumbnails.-1.filepath)q %(thumbnails.-1.filepath)q" --output "%(artist)s - %(title)s.%(ext)s" "https://music.youtube.com/watch?v=eamiiuUmVz8"

p.s. Это не содержит ответ на вопрос ТС, но хотелось сохранить подобное безумие в памяти потомков. )

krasnh ★★★★
()
Ответ на: комментарий от vetyna

Можно попробовать провернуть это при помощи простого скрипта с ffmpeg в каталоге с музыкой:

for file in *.mp3 ; do
	ffmpeg -i "$file" -an -c:v copy "$file.old.jpg" || continue
	ffmpeg -i "$file.old.jpg" -vf scale=500:500 "$file.jpg"
	ffmpeg -i "$file" -i "$file.jpg" -c copy -map 0 -map 1 "$file.tmp" && mv "$file.tmp" "$file"
done

ЗЫ. Более чем уверен, что можно это сделать в одну строку ффмпега, в сто раз быстрее и читаемее, но так проще.

ad0c
()
Последнее исправление: ad0c (всего исправлений: 1)
Есть еще прога Tartube.
Там можно нажать на вкладке Drag and Drop внизу плитки mp3 кнопку для редактирования опций. Откроется окно, там надо настроить
Вкладка Files -> File names:
File output template задать такой %(playlist_autonumber)02d %(title)s.%(ext)s
Вкладка Post-processing -> General
Ну тут все очевидно, настроить качество по вкусу и поставить галку Embed thumbnail in audio file as cover art.
Вкладка Post-processing -> yt-dlp
Поставить галку Embed metadata ... ну и желательно выбрать из выпадающего списка формат, в который convert thumbnails.
И потом при скачивании плейлиста задать ему download options mp3.
Все, и не надо красноглазить.
Хотя надо понимать, что это не в самом лучшем качестве будет, а в том, которое доступно бесплатно.
Known issues: не заполняет номера треков, неправильно заполняет года выхода альбомов - вместо них (видимо) ставит года их выкладывания на Youtube Music.
damix9 ★★★
()
Ответ на: комментарий от krasnh

--exec-before-download

а ты не подскажешь, как можно с помощью yt-dlp переименовывать файл после скачивания, если он заканчивается на .mkv? я качаю с опцией -o '%(title)s - %(id)s', но когда качается с отдельным видео и аудио, после склейки добавляется суффикс .mkv. мне нужно это .mkv убрать.
пробовал:

--exec "mv -- '%(title)s - %(id)s.mkv' '%(title)s - %(id)s'"
после скачивания ругается:
> yt --exec "mv -- '%(title)s - %(id)s.mkv' '%(title)s - %(id)s'" 'https://www.youtube.com/watch?v=vcfIFKHD9s8'
[youtube] Extracting URL: https://youtu.be/vcfIFKHD9s8
[youtube] vcfIFKHD9s8: Downloading webpage
[youtube] vcfIFKHD9s8: Downloading ios player API JSON
[youtube] vcfIFKHD9s8: Downloading android player API JSON
WARNING: [youtube] Skipping player responses from android clients (got player responses for video "aQvGIIdgFDM" instead of "vcfIFKHD9s8")
[youtube] vcfIFKHD9s8: Downloading player 74a3a562
[youtube] vcfIFKHD9s8: Downloading m3u8 information
[info] vcfIFKHD9s8: Downloading 1 format(s): 616+140-drc
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 144
[download] Destination: Я ржал до слез 😂Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.f616.mp4
[download] 100% of  198.73MiB in 00:03:56 at 861.35KiB/s
[download] Destination: Я ржал до слез 😂Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.f140-drc.m4a
[download] 100% of   11.25MiB in 00:00:09 at 1.19MiB/s
[Merger] Merging formats into "Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.mkv"
Deleting original file Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.f140-drc.m4a (pass -k to keep)
Deleting original file Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.f616.mp4 (pass -k to keep)
[ModifyChapters] Chapter information is unavailable
[Exec] Executing command: mv -- '%\(title\)s - %\(id\)s.mkv' '%\(title\)s - %\(id\)s' '/mnt/vi/Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.mkv'
mv: target '/mnt/vi/Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.mkv': Not a directory
ERROR: Postprocessing: Command returned error code 1

teod0r ★★★★★
()
Ответ на: комментарий от teod0r
$ yt-dlp -f "616+140-drc" 'https://www.youtube.com/watch?v=vcfIFKHD9s8' -o '%(title)s - %(id)s' --exec "mv '%(title)s - %(id)s.%(ext)s' '%(title)s - %(id)s'" 
Extracting cookies from firefox
Extracted 1083 cookies from firefox
[youtube] Extracting URL: https://www.youtube.com/watch?v=vcfIFKHD9s8
[youtube] vcfIFKHD9s8: Downloading webpage
[youtube] vcfIFKHD9s8: Downloading ios player API JSON
[youtube] vcfIFKHD9s8: Downloading android player API JSON
[youtube] vcfIFKHD9s8: Downloading m3u8 information
[info] vcfIFKHD9s8: Downloading 1 format(s): 616+140-drc
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 144
[download] Destination: Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.f616.mp4
[download] 100% of  198.73MiB in 00:01:43 at 1.92MiB/s
[download] Destination: Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.f140-drc.m4a
[download] 100% of   11.25MiB in 00:00:05 at 2.04MiB/s
[Merger] Merging formats into "Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.mp4"
Deleting original file Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.f140-drc.m4a (pass -k to keep)
Deleting original file Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.f616.mp4 (pass -k to keep)
[Metadata] There isn't any metadata to add
[Exec] Executing command: mv 'Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8.mp4' 'Я ржал до слез 😂 12 Минут смеха 2023 Смешные видео   Лучшие Лютые ПРИКОЛЫ Октябрь!Подборка приколов - vcfIFKHD9s8'

Задал качество жестко (616+140-drc), чтобы повторить твои условия, а то у меня было 616+251 и конечный контейнер получался .webm.

upd. Если качать с -f best, то --exec выпадет ошибкой, но это не будет помехой. Хотя и некрасиво в выхлопе. )

krasnh ★★★★
()
Последнее исправление: krasnh (всего исправлений: 2)
Ответ на: комментарий от krasnh

чтобы повторить твои условия

Но все равно контейнер не mkv у меня, хз почему различается при одинаковых условиях.

krasnh ★★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от krasnh

почему у меня видео https://youtu.be/Z8C_l8KLXUY с опциями -S 'res:1080,fps,br' -f 'bv[height<=1080][fps<=60]+ba/b' качает в 231+251, хотя должно 270+251? если вручную задать -f 270+251 — нормально скачивает.

teod0r ★★★★★
()
Ответ на: комментарий от teod0r

-S ‘res:1080,fps,br’ -f ‘bv[height<=1080][fps<=60]+ba/b’

У тебя здесь масло масляное получилось. Параметры -S и -f могут использоваться вместе, когда они дополняют друг друга, но в данном случае они дублируются.

Вот твои искомые 270+251 (использую --simulate):

$ yt-dlp  'https://youtu.be/Z8C_l8KLXUY' --simulate -S 'res:1080,fps,br'                                    

[youtube] Extracting URL: https://youtu.be/Z8C_l8KLXUY
[youtube] Z8C_l8KLXUY: Downloading webpage
[youtube] Z8C_l8KLXUY: Downloading ios player API JSON
[youtube] Z8C_l8KLXUY: Downloading android player API JSON
[youtube] Z8C_l8KLXUY: Downloading m3u8 information
[info] Z8C_l8KLXUY: Downloading 1 format(s): 270+251-drc

krasnh ★★★★
()
Ответ на: комментарий от krasnh

У тебя здесь масло масляное получилось. Параметры -S и -f могут использоваться вместе, когда они дополняют друг друга, но в данном случае они дублируются.

понятно.
но без -S 'res:1080,fps,br', когда есть только -f 'bv[height<=1080][fps<=60]+ba/b' — качает 244+251. это потому что видео вертикальное? другие видео вроде качает нормально.
просто данный -f даёт более точные настройки качества, хочу разобраться с ним. или с -S как-то можно получить аналогичные настройки качества?

teod0r ★★★★★
()
Ответ на: комментарий от teod0r

это потому что видео вертикальное?

Да, если смотреть таблицу yt-dlp -F, то нормальное видео отображается как 1920x1080, а вертикальное - 1080x1920.

В подобных ситуациях, как раз хорошо показывает себя -S "res:1080".

upd. Если делать через -f, то есть такой пример длинной строки от разраба.

krasnh ★★★★
()
Последнее исправление: krasnh (всего исправлений: 1)

Существуют две утилиты на python, которые скачивают музыку с youtube, а метаданные с spotify. Название первой spotdl, второй – не помню.

anonymous
()
2 августа 2024 г.
Ответ на: комментарий от krasnh

я сейчас качаю с -f '(bv[height<=1080][width>1080][fps<=60]/bv[width<=1080][fps<=60])+ba/b'
видео 1080p 60fps с кодеком vp9 тормозят, а с другими кодеками не тормозят. как-то можно подправить эту опцию, чтобы по возможности не качало с кодеком vp9? или как-то через -S?

teod0r ★★★★★
()
Ответ на: комментарий от krasnh

спасибо, работает.
ещё вопрос: в выводе -F есть фориаты video only m3u8. что это? размер и битрейт у них больше, но они почему-то не качаются по-умолчанию. например:

312     mp4   1920x1080   60    │ ~   1.49GiB  7456k m3u8  │ avc1.64002A    7456k video only

teod0r ★★★★★
()