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

如何用yt-dlp提取YouTube频道所有视频上传日期并生成JSON?

解决yt-dlp提取YouTube频道视频上传日期的问题

问题说明

用Python调用yt-dlp获取YouTube频道信息时,返回的JSON里没有视频上传日期,但通过Windows终端执行youtube-dl --get-filename -o "%(upload_date)s" www.youtube.com/@4everzyanya却能拿到该信息,需要实现Python版本的对应功能,提取频道所有视频的上传日期并生成JSON。

原因分析

当前代码里的extract_flat: 'in_playlist'参数是核心问题——这个参数会让yt-dlp只提取视频的扁平化基础元数据(比如视频ID、标题),不会请求每个视频的完整详情,自然拿不到upload_date这类需要额外请求的字段。而终端里的youtube-dl命令默认会获取每个视频的完整信息,所以能提取到上传日期。

解决方案

修改yt-dlp的配置选项,去掉extract_flat参数(或设为False),让yt-dlp获取每个视频的完整元数据;同时建议使用频道的视频列表专属URL(比如https://www.youtube.com/@4everZyanya/videos),避免混入Shorts、直播回放等非目标内容。

修改后的代码示例

import json
import yt_dlp as youtube_dl

# 配置选项:移除extract_flat,确保获取完整视频信息
options = {
    'ignoreerrors': True,
    'quiet': True,
    'dump_single_json': True,
    # 可选:过滤掉直播、未上线视频和Shorts,只保留常规已上传视频
    'match_filter': youtube_dl.utils.match_filter_func('!is_live & !is_upcoming & !is_short')
}

def get_channel_videos(url):
    with youtube_dl.YoutubeDL(options) as ydl:
        # extract_info返回频道完整信息,entries字段为所有视频的列表
        channel_info = ydl.extract_info(url, download=False)
        return channel_info.get('entries', [])

# 使用频道的视频列表URL,确保只获取常规视频
videos = get_channel_videos('https://www.youtube.com/@4everZyanya/videos')

# 提取每个视频的上传日期及相关标识(可选)
upload_dates = []
for video in videos:
    if video.get('upload_date'):
        upload_dates.append({
            'video_id': video.get('id'),
            'title': video.get('title'),
            'upload_date': video.get('upload_date')
        })

# 生成格式化的JSON文件
with open('channel_upload_dates.json', 'w', encoding='utf-8') as f:
    json.dump(upload_dates, f, ensure_ascii=False, indent=4)

print("上传日期JSON文件已生成")

代码说明

  • 移除extract_flat参数后,yt-dlp会为每个视频请求完整元数据,包含upload_date字段。
  • match_filter参数用于过滤非目标视频类型,可根据实际需求调整规则。
  • 最终将提取到的上传日期搭配视频ID、标题保存为JSON文件,便于后续使用。

内容的提问来源于stack exchange,提问作者César Verástegui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:01:14