录制网课时,我们经常会有对其中一段视频不满意、想要截取其中一部分、并将多个片段拼接成一个视频的需求。
通常这种需求,我们会选择使用Adobe PR、剪映等软件,将多个视频片段剪辑。然而,这种方法比较浪费时间,导出时也消耗大量不必要的显卡资源。
借助FFMpeg命令行工具(https://ffmpeg.org/),我开发了一个Python脚本,仅需将需要拼接的视频放入指定的文件夹,并在文件名上显式地标明要剪辑的时间段,就可以自动地剪切、拼接成一个成品视频啦。
人生苦短,我用Python!
将项目目录下载到本地,将ffmpeg.exe
放在根目录(下载地址:https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z,在bin
文件夹中)。
将需要拼接的视频放在项目目录in
文件夹中,用Python解释器运行main.py
。若运行成功,拼接结果在out
文件夹中、剪切结果保留在in
文件夹中。
脚本会首先检查in
文件夹中的文件是否需要被剪切,规则如下:
- 因为FFMpeg不支持中文及包含特殊符号的文件名,这类文件名会在脚本中被自动重命名,且不会被剪切。这条规则可以被忽略,因为这是脚本内部所做的事情。
- 如果你想剪切一个视频,可以在文件名后面加上@符号并指定切入点、切出点的时刻,格式为:
例如,如果我想剪切一个视频的第2分钟到第5分20秒,可以命名为:
video_name@%H_%M_%S@%H_%M_%S.suffix_name
my_video@00_02_00@00_05_20.mp4
- 如果你想从头剪切到一个时刻,可以只指定切出点,格式为:
例如,如果我想截取一个视频的前3分半,可以命名为:
video_name@%H_%M_%S.suffix_name
my_video@00_03_30.mp4
- 【重要】电脑上需要预装有Python3环境。
- 【重要】待拼接的所有视频必须来自同一个录制源,也就是码率、分辨率、文件名后缀等核心参数必须一致。(理论上不一致也能行,但我懒得写了,因为我用不上)
- 【重要】视频拼接的顺序默认是按照文件名升序排列的。
- 暂时仅支持Windows系统。支持市面上几乎所有视频、音频格式。FFMpeg支持的格式可以运行
ffmpeg -formats
来查看。 - 脚本支持回滚,被剪切的视频原文件会备份在
backup
文件夹中,以避免误操作。