youtube-dl python script postprocessing error: FFMPEG codecs aren't being recognized
Question: 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:[![enter image description
here](http://i.stack.imgur.com/g3mBo.png)](http://i.stack.imgur.com/g3mBo.png)

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: [![enter image
description
here](http://i.stack.imgur.com/0Uprn.png)](http://i.stack.imgur.com/0Uprn.png)

If the answer to my problem is to add some configuration setting to my ffmpeg
please explain how i go about doing that.


Answer: 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 because `mp3` has no extension.

As a workaround, simply add `%(ext)s` in your filename template:

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

