Python youtube-dl 是否可以获取合并文件的扩展名?

pem*_*ock 5 python youtube-dl

当我运行它时:

ydl_opts = {
    'outtmpl': files_path + '%(id)s.%(ext)s',
}
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            ydl.download([video_url])
Run Code Online (Sandbox Code Playgroud)

我在日志中得到它:

[ffmpeg] Merging formats into "/home/tmp/0uBOtQOO70Y.mkv"
[wsgi:error] Deleting original file /home/tmp/0uBOtQOO70Y.f137.mp4 (pass -k to keep)
[wsgi:error] Deleting original file /home/tmp/0uBOtQOO70Y.f251.webm (pass -k to keep)
Run Code Online (Sandbox Code Playgroud)

下载之前或之后如何获取/home/tmp/0uBOtQOO70Y.mkv ?

如果我做到了:

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
     info = ydl.extract_info(video_url, download=False)
Run Code Online (Sandbox Code Playgroud)

然后信息中是mp4扩展名

小智 2

我遇到了同样的问题,据我所知 youtube-dl 不返回输出文件的扩展名。ydl.extract_info()如果格式合并为另一种格式,则扩展名是无用的。您可以通过 \xe2\x80\x93 检查格式是否会合并ydl.extract_info()[\'format_id\'],如果数字之间有“+”符号,则会合并。但是我们仍然无法判断输出格式是什么。\n我为此创建了一个笨拙的解决方法。由于我们可以控制输出文件的名称(没有扩展名,这很难预测),我只是检查具有最可能扩展名的文件是否存在。

\n\n
url = \'https://linktovideofile.com/\'\nfilename = \'./example\'\nytdl_opts = {\'outtmpl\': filename+\'.%(ext)s\'}\nwith youtube_dl.YoutubeDL(ytdl_opts) as ytdl:\n    ytdl.download([url])\n\nif os.path.isfile(filename+\'.mkv\'):\n    extension = \'.mkv\'\n    filename= filename+extension\nelif os.path.isfile(filename+\'.mp4\'):\n    extension = \'.mp4\'\n    filename= filename+extension\nelif os.path.isfile(filename+\'.webm\'):\n    extension = \'.webm\'\n    filename= filename+extension\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望这会有所帮助,它适用于我的简单脚本,但对于更高级的脚本来说可能不够。

\n