当我运行它时:
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我为此创建了一个笨拙的解决方法。由于我们可以控制输出文件的名称(没有扩展名,这很难预测),我只是检查具有最可能扩展名的文件是否存在。
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\nRun Code Online (Sandbox Code Playgroud)\n\n我希望这会有所帮助,它适用于我的简单脚本,但对于更高级的脚本来说可能不够。
\n