You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取youtube-dl合并后文件的扩展名及完整路径?

解决youtube-dl合并文件路径与扩展名的问题

一、获取合并后文件的完整路径

有两种可靠的方法可以拿到合并后的mkv文件路径:

方法1:利用进度钩子(Progress Hook)

你可以在ydl_opts里添加progress_hooks,监听下载完成的事件,此时就能直接获取到最终合并后的文件路径。代码示例如下:

import youtube_dl

files_path = "/home/tmp/"
video_url = "你的视频URL"

def download_hook(d):
    if d['status'] == 'finished':
        # 这里的d['filename']就是合并后的完整文件路径
        print(f"下载完成,文件路径:{d['filename']}")
        # 你可以在这里把路径存下来供后续使用

ydl_opts = {
    'outtmpl': files_path + '%(id)s.%(ext)s',
    'progress_hooks': [download_hook],
}

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download([video_url])

当下载完成时,钩子函数会触发,d['filename']就是ffmpeg合并后生成的最终文件路径,完全符合你的需求。

方法2:下载后通过视频ID拼接路径(需确认合并格式)

如果已经知道合并后的格式是mkv(从日志里看到的),你也可以直接通过视频ID拼接路径:

# 先通过extract_info拿到视频ID
with youtube_dl.YoutubeDL({}) as ydl:
    info = ydl.extract_info(video_url, download=False)
    video_id = info['id']

merged_file_path = f"{files_path}{video_id}.mkv"

不过这种方法有局限性——如果youtube-dl在某些情况下合并成其他格式(比如mp4),就会出错,所以还是钩子方法更稳妥。

二、解决extract_info返回扩展名与实际合并格式不符的问题

你遇到的这个情况是因为download=False时,extract_info返回的是原始流的信息(比如视频流是mp4格式),但youtube-dl会自动合并不同编码的视频和音频流,最终生成mkv格式的文件(这是youtube-dl的默认合并格式)。

要拿到合并后的实际格式,你可以这样做:

方法1:让extract_info模拟下载流程获取合并信息

可以在extract_info时利用prepare_filename方法,获取youtube-dl计划生成的文件名,里面包含了正确的扩展名:

ydl_opts = { 'outtmpl': files_path + '%(id)s.%(ext)s', }
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    info = ydl.extract_info(video_url, download=False)
    # 用prepare_filename方法获取计划生成的文件名,包含正确的扩展名
    planned_filename = ydl.prepare_filename(info)
    print(f"计划生成的文件路径:{planned_filename}")

这里的planned_filename会和实际下载后的文件路径一致,扩展名就是合并后的mkv。

方法2:下载完成后重新提取文件信息

如果已经完成下载,你可以直接读取文件的实际扩展名:

import os

# 假设已经通过钩子拿到了merged_file_path
file_ext = os.path.splitext(merged_file_path)[1][1:]  # 拿到mkv
print(f"实际文件扩展名:{file_ext}")

这样就能完美解决你遇到的两个问题啦!

内容的提问来源于stack exchange,提问作者pembrock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:48:14