My python script is trying to download youtube videos with youtube-dl.py. Works fine unless postprocessing is required. The code:
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'])
Below is the output I receive:
I get a similar error if I try setting 'preferredcodec' to 'opus' or 'best'. I'm not sure if this is relevant, but I can run the command line counterpart fine:
youtube-dl -o 'test2.%(ext)s' --extract-audio --audio-format mp3 --no-check-certificate https://www.youtube.com/watch?v=BaW_jenozKc
I've gotten a few clues from the internet and other questions and from what i understand this is most likely an issue with my ffmpeg, which isn't a python module right? Here is my ffmpeg version and configuration:
If the answer to my problem is to add some configuration setting to my ffmpeg please explain how i go about doing that.
This is a bug in the interplay between youtube-dl and ffmpeg, caused by the lack of extension in the filename. youtube-dl calls ffmpeg. Since the filename does not contain any extension, youtube-dl asks ffmpeg to generate a temporary file
mp3
. However, ffmpeg detects the output container type automatically by the extension and fails becausemp3
has no extension.As a workaround, simply add
%(ext)s
in your filename template: