使用 ffmpeg-python 按时间段拆分视频:python-mini-projects 的 videosplitter 实战指南

发布时间:2026/9/20 22:50:33
使用 ffmpeg-python 按时间段拆分视频:python-mini-projects 的 videosplitter 实战指南 示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载本文围绕 python-mini-projects 仓库中的 Split_a_video_file_by_given_time_period 示例讲解如何基于 ffmpeg-python 将一个视频文件按给定时间点拆分为两段。文中既包含可直接复制的命令行用法也深入到 videosplitter.py 的源码实现帮助你理解 trim 滤镜与 ffmpeg-python 链式 API 的工作原理读完即可在本地环境完成视频按时间段拆分。一、项目定位一次时间点两段输出该示例解决一个非常常见的视频处理需求在给定的有效时间段内把视频拆分成两个文件。例如一场长视频录播你想以第 50 秒为界将前 50 秒与第 50 秒之后的内容分别导出为两个独立文件那么 videosplitter 正是为此设计的。其核心思路可以概括为第一段输出starttime到endtime之间的片段第二段输出endtime到视频末尾的剩余片段。也就是说你只需要提供一个时间分割点通过starttime与endtime两个参数共同表达脚本就会自动生成两个互不重叠、首尾相接的输出文件。二、环境准备与依赖安装2.1 安装 Python脚本是纯 Python 实现因此首先需要在宿主机上安装 Python 运行环境原文档明确要求 Install python in the host system。当前仓库的开发环境中已具备 Python 3.12.10可直接运行。2.2 安装 ffmpeg-pythonvideosplitter 依赖 ffmpeg-python 库导入名称为ffmpeg原文档给出的安装命令为pip install ffmpeg-python同时仓库内的 requirements.txt 也提供了锁定版本的依赖声明ffmpeg1.4即 ffmpeg-python 1.4 版本。使用 requirements.txt 安装可以保证依赖版本的一致性pip install -r requirements.txt2.3 一个容易被忽略的前提系统需要 ffmpeg 可执行文件ffmpeg-python 本质上是 ffmpeg 命令行工具的 Python 封装它负责用 Python 对象构建 ffmpeg 命令行参数最终仍会调用系统中安装的ffmpeg可执行程序来完成实际的解码、滤镜与编码工作。因此仅安装 pip 包还不够宿主机上还需具备可用的 ffmpeg 二进制文件。若运行时报错提示找不到 ffmpeg应先检查系统级 ffmpeg 是否已安装并加入 PATH。三、命令行使用指南3.1 基本用法在原文档给出的用法中脚本通过命令行接收 5 个位置参数一次调用即可完成拆分python videosplitter.py test.mp4 0 50 out1.mp4 out2.mp4参数含义对应关系如下参数含义示例值test.mp4输入视频文件名test.mp40起始时间秒050结束时间秒50out1.mp4第一段输出文件名out1.mp4out2.mp4第二段输出文件名out2.mp4上面这条命令的执行效果是将test.mp4从第 0 秒到第 50 秒的片段导出为out1.mp4从第 50 秒到视频结尾的片段导出为out2.mp4。3.2 查看帮助信息原文档同时提供了帮助入口python videosplitter.py -h由于源码基于 argparse 实现见下文源码解析执行后你会看到完整的参数说明inputfileInput filenamestarttimeStart time in secondsendtimeEnd time in secondsoutputfile1Output filenameoutputfile2Output filename借助-h帮助即使忘记参数顺序也能随时自查。3.3 时间参数的类型约束从源码可以看到starttime与endtime在 argparse 定义时被声明为typefloatvideosplitter.py。这意味着时间参数必须以秒为单位可以是整数也支持小数如12.5若传入非数字内容argparse 会在运行前直接报错起到参数校验的作用使用小数时间可以精确到毫秒级适合需要精细切分的场景。四、源码实现解析ffmpeg-python 的链式调用videosplitter.py 全文仅 24 行却完整展示了 ffmpeg-python 最典型的输入 → 滤镜 → 输出 → 执行四段式调用链非常适合作为学习 ffmpeg-python API 的入门范例。4.1 参数解析层parser argparse.ArgumentParser(descriptionSplit A media file into two chunks) parser.add_argument(inputfile, helpInput filename) parser.add_argument(starttime, typefloat, helpStart time in seconds) parser.add_argument(endtime, typefloat, helpEnd time in seconds) parser.add_argument(outputfile1, helpOutput filename) parser.add_argument(outputfile2, helpOutput filename) args parser.parse_args()脚本使用标准库argparse定义 5 个位置参数其中两个时间参数强制转为浮点数。脚本描述信息为 Split A media file into two chunks即把一个媒体文件拆分成两段。4.2 输入节点in1 ffmpeg.input(args.inputfile)ffmpeg.input()创建输入流节点对应底层 ffmpeg 命令中的-i inputfile。此处只声明了输入文件名未附加任何额外输入选项。4.3 核心拆分trim 滤镜v1 in1.filter(trim, startfloat(args.starttime), end(args.endtime)) v2 in1.filter(trim, startfloat(args.endtime))这是整个脚本的灵魂所在两行代码定义了两种拆分方式v1第一段对输入流应用trim滤镜start取starttimeend取endtime即保留[starttime, endtime)时间范围内的帧v2第二段对输入流应用trim滤镜start取endtime且不指定 end即保留从endtime到视频结尾的所有帧。trim是 ffmpeg 内置的时间裁剪滤镜它通过时间戳筛选保留指定窗口内的帧丢弃窗口外的帧是按时间段取片段的标准实现。v1、v2共用同一个输入节点in1相当于对同一条输入流并行做了两次不同的时间裁剪。4.4 输出与执行out1 ffmpeg.output(v1, args.outputfile1) out2 ffmpeg.output(v2, args.outputfile2) out1.run() out2.run()ffmpeg.output()将裁剪后的滤镜输出连接到目标文件生成输出节点out1.run()与out2.run()分别触发两次实际的 ffmpeg 转码执行依次生成两个输出文件。从整体调用链看脚本等价于在底层构造并依次运行两条 ffmpeg 命令第一条输出[starttime, endtime)片段第二条输出[endtime, EOF)片段。五、运行流程与边界场景分析5.1 完整执行流程用户在命令行提供输入文件、起始时间、结束时间、两个输出文件名argparse 完成参数解析与浮点校验ffmpeg.input()打开输入媒体文件两条trim滤镜分别截取对应时间段两次run()依次编码写出两个输出文件命令退出目录下生成拆分后的两个视频文件。5.2 边界场景与实用建议结合源码可以推断出以下行为特征与使用注意点starttime不必为 0第一段是[starttime, endtime)如果传10 50则 out1 是第 1050 秒的内容原文档示例中的0只是从开头切起的特例endtime既是第一段终点也是第二段起点因此想一刀两断只需设置一个分割点例如0 90 out1.mp4 out2.mp4即以第 90 秒为界拆分endtime需小于视频总时长若endtime超过视频总时长第一段会取到视频末尾第二段将没有可用帧请确保分割点在有效范围内时间戳细节从源码看脚本仅使用了trim滤镜并未额外调用setpts等滤镜重置时间戳videosplitter.py。大多数播放器可以正常处理这类输出但若在个别工具中遇到时间轴显示异常可以考虑在trim之后串联setptsPTS-STARTPTS将片段时间戳归零这属于可自行扩展的优化方向转码而非流复制脚本未指定codec或vcodec/acodec参数实际执行会走默认编码流程输出文件的编码格式由 ffmpeg 依据输出扩展名与默认配置决定。六、总结本项目用极简的代码演示了按时间段拆分视频的完整解决方案借助 argparse 完成命令行交互借助 ffmpeg-python 的input → filter(trim) → output → run调用链一条分割点即可同时产出两段首尾相接的视频文件。它既是可直接上手的实用小工具也是理解 ffmpeg 滤镜体系与 ffmpeg-python 链式 API 的理想参考实现。快速上手python videosplitter.py test.mp4 0 50 out1.mp4 out2.mp4查看帮助python videosplitter.py -h相关文件源码、依赖声明、官方文档赞分享示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载相关推荐python-mini-projects 实战指南基于 OpenCV 的 Capture Video Frames 视频帧提取python mini projects 实战指南基于 OpenCV 的 Capture Video Frames 视频帧提取 本文以 python mini示例工程用 Python 脚本按字母顺序归档文件python-mini-projects 文件整理实战用 Python 脚本按字母顺序归档文件python mini projects 文件整理实战 本文以 python mini projects 仓库中的 W示例工程使用 boto3 上传文件到 AWS S3python-mini-projects 的 S3_File_Upload 实战指南使用 boto3 上传文件到 AWS S3python mini projects 的 S3_File_Upload 实战指南 本文以 python mini示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考