youtube-dl python script postprocessing error: FFMPEG codecs aren't being recognized
Asked Answered
B

1

6

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

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

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

Bracelet answered 23/9, 2016 at 16:6 Comment(5)
why would postprocessing be required? cannot you just download the audio in the same codec/format as it is in YouTube to avoid any re-encodings?Needful
@Needful in my case i want mp3 files, so if the youtube video's format is not mp3 postprocessing is required to convert into mp3Bracelet
you know that by re-encoding you're losing quality, right? because both mp3 and the original format from youtube are losslessNeedful
you mean lossy?Bracelet
ah yeah sorry, lossy, not lesslessNeedful
B
6

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',
Brutish answered 23/9, 2016 at 21:43 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.