LINUX.ORG.RU

Как сделать в youtube-dl ограничение на размер загрузки

 


0

1

Здравствуйте. Мне понадобилось скачать с ютуба сборники музыки в mp3, очень много. Я воспользовался youtube-dl, вставив в текстовый файл все ссылки (youtube-dl -i -x –audio-format mp3 –audio-quality 128K -a mir.txt). И все бы хорошо, но проблема в том, что эти файлы весят 200-400 MB, и он их сначала очень долго скачивает, потом еще дольше конвертирует (10 штук - весь день). А мне из этих сборников достаточно 30 MB, поэтому дальше вырезаю с помощью audacity. У youtube-dl есть опция ограничения размера, но при этом он просто не скачивает такие файлы, а нужно чтобы скачивал, но только 30 MB. Пожалуйста подскажите как это сделать с youtube-dl или автоматизировать систему без него. Буду очень благодарен.

Ответ на: комментарий от anonymous

Этой опцией ставится формат best. У меня он сначала скачивает в каком есть формате и затем конвертирует в mp3.

Lev3912
() автор топика
Ответ на: комментарий от Lev3912

-f 'bestaudio/best[filesize<30M]'

Либо скачать только аудио, затем перегнать в нужный формат, либо скачать какой есть формат до 30 мегабайт, затем перегнать в нужный формат.

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

Добавил в команду эту о строку, скачивает как обычно. Я правильно делаю? Или чтобы скачать какой есть формат до 30 мегабайт, затем перегнать в нужный формат надо вставить только -f ‘best[filesize<30M]’ (пишет, что такой формат недоступен)?

Lev3912
() автор топика
Ответ на: комментарий от Lev3912

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

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

Нужно обрезать по времени, первые 30 мин при качестве 128K - это примерно 30 MB. Как это можно сделать? После опцией –audio-format mp3 перегоняет в нужный формат.

Lev3912
() автор топика
Ответ на: комментарий от anonymous

За ссылки на говнопереводческие сайты SO - фекалиями по всему лицу.

anonymous
()
while read link; do
    audio_link=$(youtube-dl -g -f bestaudio $link)
    title=$(youtube-dl -e $link)
    ffmpeg -i "$audio_link" -fs 30M "$title".mp3
done < mir.txt

Вместо -fs 30M (ограничение по размеру) можно поставить ограничение по времени: -t 30:00 — скачает только 30 минут аудио. А можно и то и другое вместе. Дефолтный битрейт — 128k.

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

Спасибо. Скачивает теперь, как и надо 30 MB и завершает, переводит в mp3. Но скачивается только первая ссылка из текстового файла, на все остальные ошибка: Parse error, at least 3 arguments were expected, only 1 given in string ‘om/watch?v=tssPJI51FBk’.

Lev3912
() автор топика
Ответ на: комментарий от anonymous

Еще проблема: постоянно выдает ошибки No such file or directory и Unable to extract video data, не загружает. Количество первой ошибки значительно сократилось, когда переписал ссылки на ID-адреса. Youtube-dl и ffmpeg стоят самой новой версии (на debian 10). Есть решения?

Lev3912
() автор топика

Такие большие файлы? Попробуй ключ -F и выбрать качество Audio only. Например я всегда указываю 137+140, чтобы было видео h264 и аудио aac.

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

Не помогло. Когда скачивается командой с ffmpeg, на одну и туже ссылку первый раз выдаст ошибку, а другой раз - нет. Если использовать только youtube-dl, то ошибок нет.

Lev3912
() автор топика
Ответ на: комментарий от Lev3912

постоянно выдает ошибки No such file or directory и Unable to extract video data

Слушай, даже не знаю. У меня недавно тоже какие-то странные ошибки youtube-dl выдавал, даже самый распоследний. Это может быть сам ютуб что-то мутит. Причём интересно, если повторяешь команду, то всё скачивается. То есть просто как-то рандомно бывает не срабатывает.

А у тебя, если просто youtube-dl’ом качать, без ffmpeg’f, бывают ошибки? Или бывает так, что один раз не скачивает, а другой раз с теми же параметрами скачивает?

Можно попробовать добавить проверку кода возврата youtube-dl и просто повторять команду, если была ошибка.

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

Да, у меня так же. В первый раз выдает ошибку на некоторые ссылки (а иногда - большинство), потом я новой командой запускаю все, что не загрузилось - и ошибок нет. И это проявляется как при загрузке только с youtube-dl, так и с ffmpeg. В первом случае ошибок значительно меньше, а еще можно точно определить, на какую ссылку ошибка.

В общем, в борьбе с ошибками мне помогло:

  • переписать youtube-ссылки на ID-адреса
  • скачивать утром (когда минимальная нагрузка сети)
  • повторы: -R для всей команды или –fragment-retries для отдельных фрагментов (по умолчанию - 10 попыток), добавить к youtube-dl (если с ffmpeg - ошибка синтаксиса).
Lev3912
() автор топика
Ответ на: комментарий от Lev3912

Все было бы легко и удобно, если бы при загрузке с ffmpeg показывались не загруженные ссылки, на которые ошибка. Или если бы все загруженные ссылки он убирал из тестового файла.

Lev3912
() автор топика

Господи и это dmca заблокировало. Под венду есть такой софт который ты хочешь, и качается на всю ширину канала, без ограничений со стороны youtube-dl. Конечно оно все shareware, adware.

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

В голову пока приходит только такой простой вариант:

cp mir.txt mir_original.txt

while read link; do
    ...
    ffmpeg -nostdin -i "$audio_link" -fs 30M "$title".mp3 || echo "$link" >> failed_links.txt
    ...
done < mir.txt

if [ -e failed_links.txt ]; then
    mv failed_links.txt mir.txt
    exec "$0"                      # выполнить скрипт ещё раз
fi

anonymous
()
Ответ на: комментарий от Lev3912

Unable to extract video data

Пишут, что ошибка связана то ли с контентом с возрастными ограничениями, то ли с новым плеером. В каких-то форках, говорят, уже поправили. Наверняка в следующем релизе ydl тоже исправят. А пока временно советуют добавить опцию --cookies. Я не проверял, случаются ли с ней ошибки.

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

Да, эта опция вроде как помогает, буду добавлять.

Думаю, лучше уже не сделаешь. Спасибо всем кто ответил.

Lev3912
() автор топика
Ответ на: комментарий от Lev3912
-cp mir.txt mir_original.txt
+cp -n mir.txt mir_original.txt
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.