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

如何基于包含文件路径、起止时间的数据框使用ffmpeg批量生成视频片段

使用pandas配合ffmpeg批量裁剪视频片段

需求背景

现有记录了视频路径、行为标识、时间戳的结构化数据框,需要遍历每一行数据,调用ffmpeg裁剪出对应时间范围的视频片段。

数据框样例结构

Time    File_path   Behavior    Status  experiment_id   Start_time  Stop_time   Duration
130 314.287 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_05   312.787 315.787 3.0
145 784.158 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_05   782.658 785.658 3.0
140 708.906 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_05   707.406 710.406 3.0
33  507.600 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_02   506.100 509.100 3.0
75  112.690 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_03   111.190 114.190 3.0
133 344.057 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_05   342.557 345.557 3.0
26  366.215 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_02   364.715 367.715 3.0
70  84.448  H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_03   82.948  85.948  3.0
113 738.897 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_03   737.397 740.397 3.0
128 200.548 H:/My Drive/Katz-Lab_Otter-Data/Projects/Forag...   Scrunch POINT   K8_feed_111120_05   199.048 202.048 3.0

具体要求

  • 输入:每行File_path字段对应的原始视频文件
  • 裁剪规则:按当前行的Start_time作为起始时间,Duration作为片段时长裁剪
  • 输出规则:文件保存到output_path变量指定的目录,文件名包含experiment_id、Behavior、当前行号三个信息

可直接运行的实现代码

import subprocess
import pandas as pd

# 请先自行给output_path赋值为你要保存输出文件的目录路径
# sampled_data为你的原始数据框变量

# 遍历数据框的每一行
for row in sampled_data.index:
    # 拼接输出文件完整路径
    output_file = ("%(path)s\%(experiment_id)s_%(behavior)s_%(index)s.MP4" 
                   % {"path" : output_path, 
                      "experiment_id" : sampled_data["experiment_id"][row], 
                      "behavior" : sampled_data["Behavior"][row],
                      "index" : row})
    
    # 调用ffmpeg执行裁剪
    subprocess.check_call([
        'ffmpeg',
        '-ss', str(sampled_data["Start_time"][row]),
        '-i', str(sampled_data["File_path"][row]),
        '-t', str(sampled_data["Duration"][row]),
        '-c', 'copy', 
        output_file])

实用优化建议

如果需要更高的稳定性和兼容性,可以做如下调整:

  1. 路径拼接改用os.path.join或者pathlib处理,避免Windows和Linux/macOS的路径分隔符差异问题,跨平台可直接运行
  2. 给ffmpeg加上-y参数,自动覆盖已存在的输出文件,不需要手动确认
  3. 增加异常捕获逻辑,某一行裁剪失败时跳过继续处理下一行,不会直接中断整个批量任务
  4. 可加上-loglevel error参数减少ffmpeg的日志输出,只打印错误信息,控制台更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:05