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

Python遍历文件夹批量裁剪视频前30秒代码无法运行问题求助

批量裁剪视频代码问题排查与修正

现有代码核心问题列表

  • 字符串未正确格式化:使用"{path}.mpg"语法时没有加f前缀作为f-string解析,变量不会被替换,同时path本身已经是包含后缀的完整文件路径,额外拼接.mpg会导致路径变成xxx.mpg.mpg,找不到目标输入文件。
  • 输出文件名配置错误:
    1. mice = ["022, 90"]是单元素列表,mice[0]的值为"022, 90",不是预期的两个独立编号
    2. targetname参数传入的是包含逗号的整数字符串,会导致输出文件名非法,且循环中所有输出文件重名,前一个处理结果会被后一个覆盖
  • 裁剪结束时间写死:固定写120秒,如果原视频时长不足120秒会直接报错,剪掉开头30秒应该取视频实际总时长作为结束时间
  • 冗余无效代码:循环内定义的input = ffmpeg.input(path)完全没被使用,且input是Python内置函数名,用作变量名存在潜在风险

修正后可运行的批量裁剪代码

import os
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
from moviepy.editor import VideoFileClip

def batch_time_crop():
    directory = "/Users/documents/lab/video/ProccessedVideo"
    # 输出文件保存目录,可自行修改
    output_dir = os.path.join(directory, "cropped")
    os.makedirs(output_dir, exist_ok=True)
    count = 1

    for filename in os.listdir(directory):
        if filename.endswith(".mpg") or filename.endswith(".mp4"):
            # 拼接输入文件完整路径
            input_path = os.path.join(directory, filename)
            print(f"正在处理第{count}个文件:{input_path}")
            # 获取视频总时长
            clip = VideoFileClip(input_path)
            total_duration = clip.duration
            # 跳过时长不足30秒的视频
            if total_duration <= 30:
                print(f"文件{filename}时长不足30秒,跳过处理")
                count += 1
                continue
            # 构造输出文件名,沿用原文件名加_cropped后缀避免重名,也可改用count编号命名
            file_suffix = filename.split('.')[-1]
            output_name = f"{os.path.splitext(filename)[0]}_cropped.{file_suffix}"
            output_path = os.path.join(output_dir, output_name)
            # 裁剪从30秒到视频结束
            ffmpeg_extract_subclip(input_path, 30, total_duration, targetname=output_path)
            count += 1
    print(f"处理完成,共处理{count-1}个文件")

if __name__ == "__main__":
    batch_time_crop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 05:15:02