Как скачать лучшее видео вместе с лучшим совместимым аудио с youtube-dl?

20

Я хочу использовать селектор формата, который похож на то, -f bestvideo+best audio whose extension is compatible with the video extensionчтобы их не нужно было смешивать в mkv ( WARNING: Requested formats are incompatible for merge and will be merged into mkv.).

Примечание: я знаю об этом -f bestи не хочу этого. Я хочу наилучшего качества как аудио, так и видео, при этом обеспечивая их совместимость. Как это сделать?

Мирный Кодер
источник
1
Возможно, этот вопрос и ответ будут полезны: askubuntu.com/q/806258/57576
andrew.46
@ andrew.46 Спасибо за попытку помочь, но ссылка не сильно помогла. Он описывает сценарий, когда вы ориентируетесь на определенный набор расширений. В то время как в моем случае, я гибок с моими расширениями - я просто хочу, чтобы они были совместимы. Например, webmвидео и opusаудиофайл, которые приводят к созданию .webmфайла, вполне подходят для меня.
Мирный кодер

Ответы:

33

Вы можете скачать лучшее видео и аудио, используя:

youtube-dl -f bestvideo+bestaudio "link to youtube video"

Если это приводит к ошибке, попробуйте следующее:

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4 "link to youtube video"

Здесь вы скачиваете лучшее видео и аудио отдельно, а затем объединяетесь в файл mp4. Вы также можете изменить формат вывода на объединенном видео.

Удачи!

Герман Карлссон
источник
Спасибо! Но я и так это знаю. Как я объяснил в своем комментарии , я не хочу ограничивать свой формат выбора конкретным. Таким образом, использование -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio'может не загрузить лучшее видео, если оно имеет webmрасширение. В любом случае +1 за попытку помочь.
Мирный кодер
6

старый вопрос, но сначала ответ на Google, так что

с определением следующей функции, это работало для меня (также возможно поместить это в ~/.bashrc):

youtube-dl_video_and_audio_best_no_mkv_merge () {
  video_type=$(youtube-dl -F "$@" | grep "video only" | awk '{print $2}' | tail -n 1)
  case $video_type in
    mp4)
      youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' "$@";;
    webm)
      youtube-dl -f 'bestvideo[ext=webm]+bestaudio[ext=webm]' "$@";;
    *)
      echo "new best videoformat detected, please check it out! -> aborted";;
  esac
}

теперь вы можете скачать с

youtube-dl_video_and_audio_best_no_mkv_merge "https://www.youtube.com/watch?v=*******" "https://https://www.youtube.com/watch?v=********"

источник: собственное творение

ни один. Никто
источник
2
Обратите внимание, что имя функции технически недопустимо, в частности, тире и знак плюс. Таким образом, у вас могут возникнуть проблемы с использованием этой функции, особенно при ее экспорте. Я бы порекомендовал превратить это в скрипт (поскольку он не должен быть функцией) и изменить имя на что-то вроде youtube-dl_video_and_audio_best_no_mkv_merge.
wjandrea
@wjandrea: дефисы в именах функций оболочки допустимы (как и для команд в целом). Я не знаю об экспортируемых функциях, хотя.
Дэвид Фёрстер
@DavidFoerster Да, Bash принимает недопустимые имена функций, но не может их экспортировать. Если вы попытаетесь, вы получите ошибку,not a valid identifier
wjandrea