youtube-dl Python脚本后处理错误:FFMPEG编解码器无法识别。

6

我的Python脚本试图使用youtube-dl.py下载YouTube视频。如果需要后处理,它可以正常工作。代码如下:

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'])

以下是我收到的输出:在此输入图片描述 如果我尝试将 "preferredcodec" 设置为 "opus" 或 "best",我会得到类似的错误。 我不确定这是否相关,但我可以顺利运行命令行对应程序:
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,请解释如何进行。

为什么需要后期处理?难道不能直接以与YouTube相同的编解码器/格式下载音频,以避免任何重新编码吗? - knocte
@knocte 在我的情况下,我想要 MP3 文件,所以如果 YouTube 视频的格式不是 MP3,则需要进行后处理以转换为 MP3。 - stackPusher
你知道重新编码会损失音质,对吧?因为MP3和YouTube的原始格式都是无损的。 - knocte
你的意思是有损压缩吗? - stackPusher
啊,对不起,是有损压缩,不是无损压缩。 - knocte
1个回答

6
这是youtube-dl和ffmpeg之间相互作用的一个错误,由文件名缺少扩展名引起。youtube-dl调用ffmpeg。由于文件名不包含任何扩展名,因此youtube-dl要求ffmpeg生成临时文件mp3。然而,ffmpeg通过扩展名自动检测输出容器类型并失败,因为mp3没有扩展名。
解决方法是,在文件名模板中简单地添加%(ext)s
'outtmpl': u'%(id)s.%(ext)s',

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接