news 2026/10/2 1:53:42

AutoCut 使用与原理全解:用文本编辑器剪视频的开源字幕剪辑工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AutoCut 使用与原理全解:用文本编辑器剪视频的开源字幕剪辑工具
  • 人工智能
  • 语音
  • 音视频

【免费下载链接】autocut

用文本编辑器剪视频

项目地址:https://gitcode.com/GitHub_Trending/au/autocut
点击查看免费下载

AutoCut 是一款基于 Whisper 语音转录的开源视频剪辑工具,其核心思路是"让字幕替你完成剪切":先自动为视频生成字幕,再通过编辑 Markdown 文本选择要保留的句子,最后按标记自动裁切并拼接视频片段。本文将完整讲解 AutoCut 的安装方式、转录/剪切/监听三种工作模式、命令行参数与常见问题,并结合当前仓库源码深入剖析其底层实现,帮助你直接上手这套"文本驱动剪辑"工作流。

文档说明:本文以仓库 README.md 为骨架展开,所有命令参数、文件命名规则均以当前仓库代码(main.py、transcribe.py、cut.py、daemon.py、utils.py)为准。

AutoCut 是什么:以字幕为中心的剪辑流程

AutoCut 对你的视频自动生成字幕,然后你选择需要保留的句子,AutoCut 将对你视频中对应的片段裁切并保存。你无需使用视频编辑软件,只需要编辑文本文件即可完成剪切。

整个工作流可以概括为三条命令:

# 1. 转录:从视频生成字幕 autocut -t 11-28-18.mp4 # 2. 剪切:根据标记好的字幕与 md 文件裁剪视频 autocut -c 11-28-18.mp4 11-28-18.srt 11-28-18.md # 3. 监听:持续监控文件夹,自动转录并剪切新视频 autocut -d 2022-11-04

从源码结构看,这五个核心模块各司其职:main.py 负责声明命令行参数并分发动作;transcribe.py 调用 Whisper 模型生成.srt与.md;cut.py 根据标记结果完成片段裁切与合并;daemon.py 提供文件夹监听;utils.py 提供音频加载、Markdown 解析等全局工具方法。后续章节会逐一展开。

快速上手:一个完整的录制剪辑示例

文件夹级别的自动处理

假如你录制的视频放在2022-11-04/这个文件夹里,运行:

autocut -d 2022-11-04

AutoCut 将持续对这个文件夹里的视频进行字幕抽取和剪切。例如,你刚完成一个视频录制并保存为11-28-18.mp4,AutoCut 将自动生成11-28-18.md。你在其中选择需要保留的句子后,AutoCut 将剪切出11-28-18_cut.mp4,并生成11-28-18_cut.md来预览结果。

提示:如果你使用 OBS 录屏,可以在设置->高级->录像->文件名格式中将空格改成/,即%CCYY-%MM-%DD/%hh-%mm-%ss。这样视频文件将自动放在日期命名的文件夹里,与autocut -d的目录参数天然匹配。

全部完成后,AutoCut 会在文件夹内生成autocut.md,你只需要在其中勾选需要拼接的视频,AutoCut 将输出autocut_merged.mp4和对应的字幕文件——这就是"多片段最终成片"的环节。

用 Markdown 编辑器勾选句子

你可以使用任何 Markdown 编辑器来编辑生成的.md文件,常用的是 VS Code 和 Typora。下图是通过 Typora 对11-28-18.md进行编辑的界面:

从源码看,这个.md文件由 transcribe.py 中的_save_md生成,其内部通过 utils.py 的MD类维护一个非常简单的 Markdown 任务列表:每个字幕对应一行- [ ] [字幕序号,分钟:秒] 字幕内容,勾选即改写成- [x],最后一行<-- Mark if you are done editing.表示编辑完成。剪切器只读取被标记为x的行,因此"编辑文本"本质上就是给任务打勾。

安装指南

Python 包安装

推荐使用 pip 安装(当前仓库版本已发布到 PyPI):

pip install autocut-sub

安装后即可直接导入转录相关功能(2024.03.10 更新):

from autocut import Transcribe, load_audio

对应源码见init.py:包对外导出Transcribe、load_audio、WhisperMode、WhisperModel、LANG,其中Transcribe来自 package_transcribe.py,load_audio来自 utils.py。这意味着你不必依赖命令行,也可以在自己的 Python 脚本中完成"加载音频 → 转录 → 输出 srt"的完整流程。

依赖变体:whisper / faster-whisper / openai

AutoCut 支持三种转录后端,通过extras_require控制依赖范围(见 setup.py):

# 仅使用本地 openai-whisper pip install . # 同时支持 faster-whisper(本地推理加速) pip install '.[faster]' # 同时支持调用 OpenAI Whisper API pip install '.[openai]' # 全部后端 pip install '.[all]'

三种后端在命令行中通过--whisper-mode切换:

# 使用 faster-whisper autocut -t xxx --whisper-mode=faster # 使用 openai api(需先设置 API Key) export OPENAI_API_KEY=sk-xxx autocut -t xxx --whisper-mode=openai --openai-rpm=3

在 type.py 中,WhisperMode枚举定义了whisper、openai、faster三种模式;whisper_model.py 中则分别由WhisperModel、OpenAIModel、FasterWhisperModel三个类实现(均继承自AbstractWhisperModel抽象基类)。

注意:openai与faster模式需要额外安装对应依赖,否则运行时会在对应类的load方法中抛出 ImportError 提示(见 whisper_model.py 与 whisper_model.py)。

本地源码安装测试

git clone https://github.com/mli/autocut cd autocut pip install .

上面将安装 pytorch。如果你需要 GPU 运行,且默认安装的版本不匹配的话,可以先自行安装 Pytorch。如果安装 Whisper 出现问题,请参考其官方文档(openai/whisper 的 setup 章节)。

安装 ffmpeg

AutoCut 依赖 ffmpeg 做音频提取与视频导出(utils.py 的load_audio即通过ffmpeg-python将任意媒体转为 16kHz 单声道 PCM),请按平台安装:

# on Ubuntu or Debian sudo apt update && sudo apt install ffmpeg # on Arch Linux sudo pacman -S ffmpeg # on MacOS using Homebrew (https://brew.sh/) brew install ffmpeg # on Windows using Scoop (https://scoop.sh/) scoop install ffmpeg

Docker 安装

首先将项目克隆到本地:

git clone https://github.com/mli/autocut.git
安装 CPU 版本

进入项目根目录构建 docker 映像(对应仓库中的 Dockerfile):

docker build -t autocut .

运行下面的命令创建 docker 容器,就可以直接使用了:

docker run -it --rm -v E:\autocut:/autocut/video autocut /bin/bash

其中-v将主机存放视频的文件夹E:\autocut映射到容器的/autocut/video目录,请将E:\autocut替换为你自己主机上存放视频的目录。

安装 GPU 版本

使用 GPU 加速需要主机有 Nvidia 显卡并安装好相应驱动,然后在项目根目录构建映像(对应 Dockerfile.cuda):

docker build -f ./Dockerfile.cuda -t autocut-gpu .

使用 GPU 加速时,运行 docker 容器需添加参数--gpus all:

docker run --gpus all -it --rm -v E:\autocut:/autocut/video autocut-gpu

命令行参数全景

AutoCut 的全部命令行参数在 main.py 中通过argparse声明,下面按类别整理:

参数默认值说明
-t/--transcribe无将视频/音频转录为字幕(布尔开关)
-c/--cut无根据字幕剪切视频(布尔开关)
-d/--daemon无监听文件夹自动转录并剪切(布尔开关)
-s无将.srt转换为紧凑格式便于编辑(布尔开关)
-m/--to-md无将.srt转换为.md便于编辑(布尔开关)
--langzh转录输出语言,支持 zh/en 及数十种语言(见下方列表)
--prompt""喂给 Whisper 的初始提示词
--whisper-modewhisper转录后端:whisper/openai/faster
--whisper-modelsmall模型大小:tiny/base/small/medium/large/large-v2
--openai-rpm3OpenAI API 每分钟请求数(免费用户 3 RPM,付费用户可选 50 RPM)
--bitrate10m导出视频的比特率,如10m、1m、500k
--vadauto是否使用 VAD 语音活动检测,取值1/0/auto
--force无即使文件已存在也强制覆盖写入(布尔开关)
--encodingutf-8生成与读取文档的编码格式
--device自动强制转录设备:cpu/cuda,默认有 GPU 则自动使用

其中--lang的可选值以 type.py 的LANG字面量类型为准,包括zh、en以及 Afrikaans、Arabic、Armenian、Japanese、Korean、Russian、Vietnamese、Welsh 等数十种语言,完整列表可直接查看该文件。

主函数的分发逻辑(main.py)依次判断transcribe→to_md→cut→daemon→s,若未指定任何动作则提示 "No action, use -c, -t or -d"。

转录:从视频生成.srt与.md

转录单个视频

autocut -t 22-52-00.mp4

该命令会在同一目录生成22-52-00.srt(标准字幕)与22-52-00.md(可勾选的 Markdown 任务列表)。

选择更大的模型提升转录质量

autocut -t 22-52-00.mp4 --whisper-model large

默认模型是small。更好的模型是medium和large,但推荐使用 GPU 获得更好的速度;也可以使用更快的tiny和base,但转录质量会下降。模型枚举在 type.py 的WhisperModel中定义。

转录流程的源码级拆解

从 transcribe.py 的run方法可以看到完整链路:

  1. 加载音频:utils.load_audio(input, sr=16000)将视频解压为 16kHz 采样率的单声道 float32 数组(utils.py);
  2. 语音活动检测(VAD):_detect_voice_activity默认加载snakers4/silero-vad模型,先去除过短片段(阈值 1.0 秒),再向头尾扩展 0.2 秒避免切得过紧,最后合并间距小于 0.5 秒的相邻片段(对应 utils.py 的expand_segments、remove_short_segments、merge_adjacent_segments三个工具函数);
  3. 分段转录:_transcribe将每个语音片段单独送入 Whisper 模型;
  4. 生成字幕:_save_srt用srt.compose写出标准.srt;_save_md再基于 srt 生成 Markdown 任务列表。

如果传入--vad 0,则跳过 VAD,将整段音频作为一个片段直接转录(transcribe.py)。

关于< No Speech >标记

在 whisper_model.py 的gen_srt中,若相邻两段语音之间间隔超过 1.0 秒,AutoCut 会插入一条< No Speech >字幕来占位。这些占位项在后续拼接视频的描述生成中会被过滤掉(见 cut.py),但在.md编辑阶段它们会明确提醒你"这里有一段时间没有说话"。

剪切:根据标记后的字幕裁切视频

基本剪切命令

autocut -c 22-52-00.mp4 22-52-00.srt 22-52-00.md

剪切器(cut.py)的输入按扩展名自动归类:.srt归字幕、.md归标记文件、其余归媒体文件,因此三个参数顺序可任意排列。它会:

  1. 读取.md中所有被标记为x的字幕序号(md.tasks()过滤 + 正则\[(\d+)提取序号,见 cut.py);
  2. 用这些序号过滤 srt 字幕,并按时间排序;
  3. 将间隔小于 0.5 秒的相邻字幕合并为同一片段(cut.py);
  4. 用 moviepy 对每个片段subclip后拼接导出,输出文件名为22-52-00_cut.mp4(文件名规则见 utils.py 的add_cut)。

导出时默认比特率为--bitrate 10m,可根据需要调大调小;视频统一以aac音频编码写出,并自动做 44.1kHz 重采样与audio_normalize音量归一化(cut.py)。如果输入的是音频文件(如.mp3),则输出_cut.mp3并走纯音频拼接路径(cut.py)。

不传.md:直接在 srt 中删除句子

如果不习惯 Markdown 格式文件,你也可以直接在srt文件里删除不要的句子,剪切时不传入md文件名即可:

autocut -c 22-52-00.mp4 22-52-00.srt

此时 Cutter 会跳过 md 过滤逻辑,直接把 srt 中剩下的所有字幕按时间顺序合并剪切(cut.py)。

从 srt 生成 md 便于编辑

如果仅有srt文件、编辑不方便,可以使用如下命令生成md文件再编辑:

autocut -m test.srt test.mp4 autocut -m test.mp4 test.srt # 支持视频和字幕乱序传入 autocut -m test.srt # 也可以只传入字幕文件

-m分支在 main.py 中处理:当传入两个参数时,会先判断第一个参数扩展名是否为.srt,不是则自动交换顺序,保证 srt 在前;随后调用 utils.py 的trans_srt_to_md。需要注意的是,这种方式会完全对照 srt 生成 md,不会出现< No Speech >等提示文本;若同时传入视频文件,md 中会嵌入对应的<video>预览标签(md.add_video)。

监听模式:文件夹自动转录与剪切

autocut -d是面向"持续录制、持续剪辑"场景的模式。从 daemon.py 的实现看,它会循环扫描文件夹,初始每 1 秒轮询一次,随后逐渐增大间隔(上限 60 秒),避免空转浪费资源。

每一轮_iter(daemon.py)的逻辑是:

  1. 用 glob 列出文件夹内所有文件,筛出媒体文件(is_video/is_audio,支持 mp4/mov/mkv/avi/flv/f4v/webm 与 ogg/wav/mp3/flac/m4a,见 utils.py);
  2. 若某个媒体文件还没有对应的.srt和.md,立即调用Transcribe.run转录;若抛出RuntimeError(很可能是视频仍在录制中、文件未写完),则记警告并跳过;
  3. 若已有.md且被标记为编辑完成,且还没有生成_cut产物,则调用Cutter.run剪切;
  4. 最后维护autocut.md的合并清单(daemon.py):Merger.write_md为每个已完成剪辑的视频生成一行任务(自动抽取其前 50 字符描述、标注[Edited]状态),一旦你在autocut.md中勾选并标记完成,Merger.run就会把所有选中视频拼接为autocut_merged.mp4(cut.py)。

实用小技巧

  1. 转录质量与粗剪:讲得流利的视频转录质量会更高,这源于 Whisper 训练数据分布。对一个视频,可以先粗选句子,然后在剪出来的视频上再剪一次,逐层精修。
  2. 紧凑字幕格式:最终视频生成的字幕通常还需要小幅编辑,但srt中空行太多。可以用autocut -s 22-52-00.srt生成一个紧凑版本22-52-00_compact.srt方便编辑(该格式不合法,但编辑器如 VS Code 仍会语法高亮)。编辑完成后,再对紧凑文件执行autocut -s 22-52-00_compact.srt即可转回正常格式。底层实现在 utils.py 的compact_rst:转紧凑格式时每行变为时间戳 --> 时间戳 文本(文本还会经 OpenCC 转为简体中文),转回时逐行解析重建标准 srt。
  3. 编辑器选择:Typora 和 VS Code 编辑 Markdown 都很方便,二者都有标记一行或多行的快捷键。但 VS Code 的视频预览似乎有点问题,建议预览视频片段时使用 Typora 或其他支持视频嵌入的编辑器。
  4. 导出性能:视频通过 ffmpeg 导出。在 Apple M1 芯片上它用不了 GPU,导致导出速度不如专业视频软件。

常见问题(FAQ)

输出的是乱码?

AutoCut 默认输出编码是utf-8,请确保你的编辑器也使用utf-8解码。你可以通过--encoding指定其他编码格式,但需要注意生成字幕文件和使用字幕文件剪辑时的编码格式需要一致。例如使用gbk:

autocut -t test.mp4 --encoding=gbk autocut -c test.mp4 test.srt test.md --encoding=gbk

注意:如果使用非 utf-8 编码(如gbk)生成md文件并用 Typora 打开,该文件可能被 Typora 自动转码为其他编码,此时再以生成时指定的编码剪辑就可能出现"编码不支持"等报错。因此建议在使用 Typora 编辑后,通过 VSCode 等工具将文件保存为你需要的编码格式,再执行剪辑。

从源码看,编码参数贯穿读写两端:transcribe.py 写 srt 与 md 时使用self.args.encoding,cut.py 读 srt 与 md 时同样使用self.args.encoding,两边不一致必然导致解码失败。

如何使用 GPU 来转录?

当你有 Nvidia GPU 且安装了对应版本的 PyTorch 时,转录默认在 GPU 上进行。可以通过以下命令确认环境是否支持 GPU:

python -c "import torch; print(torch.cuda.is_available())"

如果返回False,可以在安装 AutoCut 前手动安装对应的 GPU 版本 PyTorch。

使用 GPU 时报错显存不够?

Whisper 的大模型需要一定的 GPU 显存。如果显存不够,可以改用小一点的模型(如small);如果仍想使用大模型,可以通过--device强制使用 CPU:

autocut -t 11-28-18.mp4 --whisper-model large --device cpu

--device的取值在 main.py 限定为cpu/cuda,默认None时自动选择(有 GPU 用 GPU,否则用 CPU)。顺带一提,当强制 CPU 且存在多个语音片段时,whisper_model.py 会启动一个 4 进程的进程池并行转录以提升速度。

能不能使用 pip 安装?

可以。Whisper 本身也已发布到 PyPI,可以直接用pip install openai-whisper安装;AutoCut 本体则通过pip install autocut-sub安装(见 setup.py 的name="autocut-sub"与 console_scripts 入口点autocut = autocut.main:main)。

如何参与贡献

代码结构

仓库的代码布局如下:

autocut │ .gitignore │ LICENSE │ README.md # 一般新增或修改需要让使用者知道就需要对应更新 README.md 内容 │ setup.py │ └─autocut # 核心代码位于 autocut 文件夹中,新增功能的实现也一般在这里面进行修改或新增 │ cut.py │ daemon.py │ main.py │ transcribe.py │ utils.py └─ __init__.py

各模块职责(与 README.md 的"开发"一节一致):

  • utils.py:全局共用的工具方法(音频加载、Markdown 解析、srt/md 转换等);
  • transcribe.py:调用模型生成srt和md的部分;
  • cut.py:提供根据标记后md或srt进行视频剪切合并的功能;
  • daemon.py:提供监听文件夹生成字幕和剪切视频的功能;
  • main.py:声明命令行参数,根据输入参数调用对应功能。

开发环境搭建

开始安装依赖之前,建议先了解 Anaconda 或 venv 的虚拟环境使用,推荐使用虚拟环境来搭建开发环境,具体安装方式为在虚拟环境中按上文安装步骤进行。

为什么推荐虚拟环境开发?

一方面是保证各种不同的开发环境之间互相不污染; 更重要的是,这个项目实际上是一个 Python Package,安装之后 AutoCut 的代码会变成你的环境依赖。因此在你更新代码之后,需要将新代码重新安装到环境中,才能调用到新代码。

开发注意事项:代码风格遵循 PEP-8,可使用自动格式化工具(CI 使用 black 做 lint);工具函数尽量放在utils.py中;提交前请对与你修改直接相关的部分以及你修改会影响到的部分都进行测试。测试运行方式为pip install pytest后执行pytest test,lint 为pip install black后执行black .。仓库的测试用例覆盖在 test/config.py 中定义,媒体样本包括 mp4、mov、mkv、flv、mp3 等格式(test/media),转录与剪切的用例分别在 test/test_transcribe.py 和 test/test_cut.py 中。

提交规范

  1. commit 信息用英文描述清楚做了哪些修改,小写字母开头;
  2. 尽量保证一次 commit 涉及的修改较小、描述简短,方便之后查找;
  3. PR 的 title 简述修改内容,contents 具体写下修改内容;
  4. 提交前运行测试与 lint。

总结

AutoCut 把"剪视频"这件事抽象成了"编辑文本":转录生成字幕与 Markdown 任务列表,勾选即标记保留,-c完成裁剪,-d自动接力,autocut.md完成多段拼接。配合 whisper / faster-whisper / OpenAI API 三种转录后端、--encoding编码控制、VAD 语音活动检测等细节设计,它非常适合"口播录制 → 文本粗剪 → 快速成片"的内容生产流程。结合本仓库源码阅读 main.py、transcribe.py、cut.py、daemon.py 四个入口文件,即可完整掌握其内部机制,并按需二次开发。

  • 人工智能
  • 语音
  • 音视频

【免费下载链接】autocut

用文本编辑器剪视频

项目地址:https://gitcode.com/GitHub_Trending/au/autocut
点击查看免费下载
上一篇:为什么你的USB无线网卡在Linux上无法使用?rtl8812AU_8821AU兼容性清单
下一篇:Chia区块链开发环境终极指南:7步打造个性化高效工作流

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 1:52:23

YOLOv8 INT8量化后mAP暴跌:sigmoid输出归零的排查与修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:51:49

一张图看懂制造业售后服务流程与系统支撑

开头制造业的售后服务&#xff0c;很多企业都挂在嘴边&#xff0c;但真正拉出来遛遛&#xff0c;能做到流程清晰、责任明确、系统支撑到位的&#xff0c;其实没几家。我这些年走访过不少工厂&#xff0c;见过售后部门忙成一锅粥的&#xff0c;也见过靠几个微信群里吼来吼去把服…

作者头像 李华
网站建设 2026/10/2 1:51:40

mpv 章节导航零配置上手:2 分钟搞定 4 类场景

mpv 章节导航零配置上手&#xff1a;2 分钟搞定 4 类场景 【免费下载链接】mpv &#x1f3a5; Command line media player 项目地址: https://gitcode.com/GitHub_Trending/mp/mpv 手头素材五花八门&#xff1a;网课四集散在不同文件夹、一段 3 小时的访谈想按段落快速翻…

作者头像 李华
网站建设 2026/10/2 1:49:29

Qt动态标签页设计:QTabWidget生命周期管理与可扩展架构

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华