Скачать только аудио с youtube видео с помощью youtube-dl в python script

Там несколько сообщений на загрузка аудио с YouTube с помощью youtube-dl, но ни один из них не является конкретным или слишком полезным. Мне интересно, какой лучший способ сделать это с Python script.

Например, здесь пример README для загрузки видео:

import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])

Очевидно, что если вы просто заботитесь об аудио, вы не хотите загружать все видео...

Источник youtube-dl является настолько полезным (т.е. не очень).

Любые предложения, как script это?

Ответы

Ответ 1

Прочтите в инструкциях разработчика для измененного примера:

from __future__ import unicode_literals
import youtube_dl


ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '192',
    }],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])

Это будет загружать аудиофайл, если это возможно/поддерживается. Если файл уже не mp3, загруженный файл будет преобразован в mp3, используя ffmpeg или avconv. Для получения дополнительной информации см. Записи format и postprocessors в текущей версии youtube -dl.

Ответ 2

Используйте аргумент postprocessors. Список всех доступных постпроцессоров можно найти здесь.

Если вы хотите передать дополнительные опции ffmpeg или avconv, которые не включены в библиотеку youtube-dl (например, битрейт аудио - -ar <BR> в ffmpeg), добавьте postprocessor_args в список.

Вы также можете предпочесть ffmpeg вместо avconv, установив prefer_ffmpeg в True.

И для сохранения как исходного, так и преобразованного аудиофайла установите 'keepvideo' в True.

Например:

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'wav',
        'preferredquality': '192'
    }],
    'postprocessor_args': [
        '-ar', '16000'
    ],
    'prefer_ffmpeg': True,
    'keepvideo': True
}

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])

Список всех доступных параметров приведен в документации. Вы можете прочитать код постпроцессора ffmpeg здесь.

И менее сложный пример в их GitHub README.