2016-09-23 11 views
1

Мой скрипт python пытается загрузить видео youtube с помощью youtube-dl.py. Прекрасно работает, если не требуется постобработка. Код:ошибка постпроцессора скрипта youtube-dl: кодеки FFMPEG не распознаются

import youtube_dl 

options = { 
    'format':'bestaudio/best', 
    'extractaudio':True, 
    'audioformat':'mp3', 
    'outtmpl':'%(id)s',  #name the file the ID of the video 
    'noplaylist':True, 
    'nocheckcertificate':True, 
    'postprocessors': [{ 
     'key': 'FFmpegExtractAudio', 
     'preferredcodec': 'mp3', 
     'preferredquality': '192', 
    }] 
} 

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

Ниже выходной я получаю: enter image description here

я получаю подобную ошибку при попытке установки «preferredcodec» до «опуса» или «лучше». Я не уверен, если это уместно, но я могу запустить аналог командной строки в порядке:

youtube-dl -o 'test2.%(ext)s' --extract-audio --audio-format mp3 --no-check-certificate https://www.youtube.com/watch?v=BaW_jenozKc 

Я получил несколько подсказок из Интернета и других вопросов, и от того, что я понимаю, что это, скорее всего, проблема с моей ffmpeg, которая не является модулем python? Вот моя версия и конфигурация ffmpeg: enter image description here

Если ответ на мою проблему заключается в добавлении некоторых настроек конфигурации в мой ffmpeg, пожалуйста, объясните, как я это делаю.

+0

почему Постобработка потребуется? не можете ли вы просто загрузить аудио в том же кодеке/формате, что и на YouTube, чтобы избежать повторного кодирования? – knocte

+0

@knocte в моем случае я хочу mp3-файлы, поэтому, если формат видео youtube не является постобработкой mp3, требуется конвертировать в mp3 – stackPusher

+0

, вы знаете, что путем повторного кодирования вы теряете качество, не так ли? потому что и mp3, и исходный формат с youtube без потерь – knocte

ответ

2

Это ошибка во взаимодействии между youtube-dl и ffmpeg, вызванная отсутствием расширения в имени файла. youtube-dl вызывает ffmpeg. Поскольку имя файла не содержит никакого расширения, youtube-dl запрашивает ffmpeg для создания временного файла mp3. Однако ffmpeg автоматически обнаруживает тип выходного контейнера с расширением и не работает, потому что mp3 не имеет расширения.

В качестве временного решения, просто добавьте %(ext)s в шаблон имени файла:

'outtmpl': u'%(id)s.%(ext)s',