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

如何在Python中使用youtube_dl设置start_time和end_time下载视频片段

解决youtube_dl无法按指定时间片段下载的问题

你的代码里直接设置start_time和end_time无法生效,原因是这两个参数属于youtube_dl的下载阶段参数,部分视频网站不支持直接请求片段内容;另外当你启用FFmpegExtractAudio后处理器时,需要把截取逻辑传递给FFmpeg来完成后期裁剪,否则下载完整文件后只会转码而不截取。

下面是两种可行的修改方案:

方案一:通过FFmpeg后处理阶段截取(通用兼容所有网站)

直接在音频提取后处理器中添加FFmpeg的截取参数,确保转码时同时裁剪指定片段:

def download_video(i, url, start_time, end_time):
    # 计算截取时长
    duration = end_time - start_time
    ydl_opts = {
        'format': 'bestaudio/best',
        'outtmpl': f'./media/{i}.%(ext)s',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
            # 添加FFmpeg截取参数:-ss 起始时间(秒),-t 时长(秒)
            'postprocessor_args': [
                '-ss', str(start_time),
                '-t', str(duration)
            ]
        }],
        'logger': TerminalLogger(),
        'progress_hooks': [download_finished_hook],
    }

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

方案二:下载阶段直接请求片段(仅支持部分网站)

如果目标网站支持HTTP范围请求,可以保留start_time和end_time,同时添加force_keyframes_at_cuts=True强制在截取点生成关键帧,避免播放异常:

def download_video(i, url, start_time, end_time):
    ydl_opts = {
        'format': 'bestaudio/best',
        'outtmpl': f'./media/{i}.%(ext)s',
        'start_time': start_time,
        'end_time': end_time,
        # 强制在截取位置生成关键帧,避免播放异常
        'force_keyframes_at_cuts': True,
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        'logger': TerminalLogger(),
        'progress_hooks': [download_finished_hook],
    }

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

注意事项

  • start_time和end_time如果是整数秒直接传数字即可,需要精确到毫秒的话,传递字符串格式(比如'10.5')给FFmpeg参数。
  • 方案一兼容性最好,适合所有网站,但会先下载完整文件再裁剪;方案二节省流量,但依赖网站的片段下载支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:50:15