视频剪辑

起止裁剪/关键帧无损

409 次访问
✂️
VIDEO TRIM

视频剪辑

按时间轴精确截取视频片段 · 无损(直接复制)模式最快

FFmpeg 命令行(推荐)

视频处理涉及复杂的解码 / 编码 / 滤镜操作,桌面 FFmpeg(开源 / 免费)是业界事实标准。安装 5 分钟,运行如下命令一次解决:

# 无损剪辑(关键帧对齐,可能有 1-2 秒误差,但 100x 速度) ffmpeg -i input.mp4 -ss 00:00:10 -to 00:01:30 -c copy output.mp4 # 精确剪辑(重新编码,秒级精度) ffmpeg -i input.mp4 -ss 00:00:10 -to 00:01:30 -c:v libx264 -c:a aac output.mp4 # 从开头 30 秒 ffmpeg -i input.mp4 -t 30 -c copy output.mp4

桌面 FFmpeg 安装

macOS

brew install ffmpeg

用 Homebrew,5 秒安装

Linux

sudo apt install ffmpeg # 或 sudo dnf install ffmpeg

Debian/Ubuntu/Fedora

Windows

下载 Gyan FFmpeg builds

解压后将 bin 目录加入 PATH

Docker

docker run --rm -v $PWD:/work \ jrottenberg/ffmpeg -i input.mp4 ...

无需本地安装

操作步骤

步骤 1:安装 FFmpeg

按上方系统对应的命令安装。验证:ffmpeg -version 应输出版本号。

步骤 2:复制本页面提供的命令

input.mp4 改为你的实际视频文件路径。

步骤 3:在视频所在目录运行

用终端 (Terminal / cmd / PowerShell) 切到视频所在目录,粘贴命令并回车。

步骤 4:等待处理完成

短视频几秒,长视频几分钟。输出文件出现在同目录。

提示

-ss:起始时间,-to:结束时间,-t:持续时长。

-c copy:直接复制流(最快但只能在关键帧对齐处剪)。

关于本工具

了解工具定位 · 使用场景 · 对比优势

指定视频的起止时间,裁剪出精确片段,支持关键帧无损输出。适合剪辑师快速截取素材片段、自媒体作者提取高光时刻、开发者批量处理视频。所有操作在浏览器端完成,视频不上传到任何服务器。

使用场景

🎬

短视频去头尾

自媒体创作者录制口播或产品展示时,开头常有3秒准备动作、结尾有2秒收镜空白。本工具通过时间轴精确输入起止时间(如00:03-01:45),直接输出关键帧无损的纯净片段,省去导入专业剪辑软件的时间,单条视频处理仅需数秒。

📱

手机素材去冗余

普通用户用手机拍摄生活记录,常拍出长达5分钟但实际有效内容仅2分钟的长视频。工具支持直接输入起止秒数,将中间拖沓的等待、重复动作、手抖片段一刀切除,保留从精彩瞬间开始到结束的完整段落,且不压缩画质。

🎓

课程片段提取

在线教育从业者录制1小时直播课,需要从中截取某知识点讲解的5分钟片段作为试看素材。本工具不依赖专业剪辑软件,直接按时间戳(如12:30-17:30)输出无损片段,保持原视频的编码与帧率,避免二次编码导致画质损失。

🖥️

会议录屏精剪

远程办公者录制了45分钟团队会议,仅需保留关键讨论的10分钟片段(如15:20-25:30)。工具以毫秒级精度定位起止点,输出与原录屏完全一致的无损视频,无需重新编码,适合直接作为会议纪要附件或邮件发送。

🎵

音乐视频截取

音乐爱好者从演唱会录像或MV中截取某段副歌(如1分20秒到2分10秒),希望保留原始音画同步且无任何压缩。本工具直接拷贝视频流与音频流,不经过重新编码,确保截取片段与原片段在画质、音质上完全一致。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具(浏览器端 FFmpeg)竞品 A(在线剪辑平台)传统方法(本地专业软件)
数据隐私纯浏览器处理,视频不上传服务器需上传视频到云端服务器处理本地处理,不依赖网络,但需安装软件
处理速度秒级响应(取决于视频大小和浏览器性能)受上传带宽和服务器排队影响,通常需等待取决于本地硬件性能,大型项目渲染较慢
离线可用完全离线,无需网络必须联网完全离线
大小限制受浏览器内存限制(通常 2GB 以内)受平台上传限制(通常 500MB-2GB)无限制(取决于本地硬盘)
收费模式完全免费通常免费版有水印或时长限制,需付费解锁一次性购买或订阅制,价格较高
注册要求无需注册,打开即用通常需要注册账号需要安装和激活
适用场景快速裁剪、截取关键帧,无需安装轻度剪辑、添加特效,需要模板专业级剪辑、多轨道复杂项目

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 点击「选择视频」按钮上传 MP4/MOV 文件,单文件 ≤ 500MB
  2. 在时间轴输入框设置起止时间(格式 HH:MM:SS.mmm),支持精确到帧
  3. 勾选「关键帧裁剪」以保留原始画质,取消则按关键帧对齐
  4. 点击「开始裁剪」按钮,系统使用 FFmpeg 在浏览器内完成处理
  5. 处理完成后点击「下载」按钮保存裁剪后的视频文件

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
输入文件: demo.mp4 起始时间: 00:00:10 结束时间: 00:00:20输出文件: demo_cut.mp4 (时长10秒,关键帧无损)典型场景:从视频中间截取一段,保留原始画质
输入文件: clip.mp4 起始时间: 00:00:00 结束时间: 00:00:30输出文件: clip_cut.mp4 (时长30秒,关键帧无损)典型场景:从视频开头裁剪,常用于去片头
输入文件: long.mp4 起始时间: 01:30:00 结束时间: 02:00:00输出文件: long_cut.mp4 (时长30分钟,关键帧无损)边界 case:裁剪长视频(超过1小时),处理时间较长
输入文件: short.mp4 起始时间: 00:00:00 结束时间: 00:00:01输出文件: short_cut.mp4 (时长1秒,关键帧无损)边界 case:裁剪极短视频(1秒),测试最小时长
输入文件: gopro.mp4 起始时间: 00:00:05 结束时间: 00:00:05输出文件: gopro_cut.mp4 (时长0秒,无输出)易错 case:起始时间等于结束时间,输出空文件
输入文件: meeting.mp4 起始时间: 00:00:10 结束时间: 00:00:10.5输出文件: meeting_cut.mp4 (时长0.5秒,关键帧无损)边界 case:使用毫秒级精度(0.5秒),测试时间格式兼容性
输入文件: raw.avi 起始时间: 00:00:00 结束时间: 00:00:10输出文件: raw_cut.mp4 (时长10秒,关键帧无损)典型场景:输入非MP4格式(如AVI),输出自动转为MP4

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 时间格式用了中文冒号或全角字符

错误
00:05:30,500
修复
00:05:30.500

FFmpeg 时间戳只接受半角冒号(:)作为分隔符,小数点作为毫秒分隔符;全角符号会导致解析失败返回 'Invalid argument'

2. 起止时间填反(结束早于开始)

错误
start=00:10:00, end=00:05:00
修复
start=00:05:00, end=00:10:00

FFmpeg 的 -ss 和 -to 参数不会自动交换顺序;结束时间小于开始时间时输出空文件或报错 'Duration too short'

3. 关键帧裁剪时未对齐到关键帧导致黑屏开头

错误
输入 start=00:01:23.456(非关键帧时间点)
修复
输入 start=00:01:24.000(关键帧时间点,或使用 -noaccurate_seek 参数)

FFmpeg 默认 seek 到最近关键帧;若 start 不在关键帧上,输出视频开头会有一段黑屏/静帧直到下一个关键帧

4. 裁剪时长单位混淆(秒 vs 时分秒)

错误
-t 120(以为是 2 分钟,实际是 120 秒,结果正确但容易误解)
修复
-t 00:02:00 或 -t 120(明确单位,推荐用 HH:MM:SS 格式避免歧义)

FFmpeg -t 参数接受秒数或 HH:MM:SS 格式;混用时若写 -t 2 只裁剪 2 秒而非 2 分钟

5. 输出文件名与输入文件同名导致覆盖

错误
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 input.mp4
修复
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 output.mp4

FFmpeg 默认覆盖输出文件;同名时原文件会被覆盖且无法恢复,需使用不同输出名或加 -n 参数禁止覆盖

6. 未指定编码器导致重新编码(非无损)

错误
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 output.mp4
修复
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4

不加 -c copy 时 FFmpeg 会重新编码视频流,损失画质且速度慢;-c copy 实现流复制保持原编码无损

7. 裁剪后音频视频不同步

错误
仅用 -ss 在输入前(-ss before -i)且 -to 在输出后
修复
使用 -ss 在输入后(-ss after -i)或配合 -copyts 参数

-ss 在 -i 之前会快速 seek 但可能丢失关键帧前的音频帧导致不同步;-ss 在 -i 之后精确但慢,适合短片段

8. 容器格式不支持所选编码(如 MP4 放 PCM 音频)

错误
ffmpeg -i input.mkv -c copy output.mp4(原视频含 PCM 音频或 DTS 音轨)
修复
ffmpeg -i input.mkv -c copy -map 0 -c:a aac output.mp4

MP4 容器不支持 PCM、DTS、FLAC 等音频编码;直接复制会报错 'Codec not supported in container',需转码音频

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

T_out = T_in + (C_out - C_in) / FPS

变量说明

  • T_out — 输出视频时长(秒)
  • T_in — 输入视频时长(秒)
  • C_out — 裁剪结束帧序号
  • C_in — 裁剪起始帧序号
  • FPS — 视频帧率(帧/秒)

示例

一段 120 秒的视频,帧率 30 FPS。从第 150 帧裁剪到第 900 帧。则 T_in=120,C_in=150,C_out=900,FPS=30。T_out = 120 + (900 - 150) / 30 = 120 + 25 = 145 秒。输出视频时长为 145 秒。

适用范围

适用于基于关键帧(I帧)的无损裁剪,FFmpeg 的 -c copy 模式。若裁剪点不在关键帧上,实际输出时长可能因 GOP 结构略有偏差(±1 帧时长)。不适用于重新编码(转码)场景。

原理图

选择视频文件本地.mp4/.mov设置起止时间输入秒数/时间码关键帧模式可选FFmpeg 裁剪浏览器内 WASM下载新视频关键帧裁剪流程(可选)分析关键帧对齐到 I 帧无损截取段重组输出注:关键帧裁剪不需要重新编码,速度极快且画质无损。若起止点不在关键帧上,工具会自动对齐到最近的 I 帧。
用户输入 本地处理(WASM) 输出结果 关键帧流程

开发者集成

3 种主流语言 · 复制即用

import subprocess

# 使用 FFmpeg 裁剪视频:保留第 10 秒到第 20 秒,关键帧无损
input_file = "input.mp4"
output_file = "output_cut.mp4"
start_time = "00:00:10"
duration = "00:00:10"  # 从 start 开始持续 10 秒

# -c copy 表示不重新编码,保持原质量
cmd = [
    "ffmpeg",
    "-i", input_file,
    "-ss", start_time,
    "-t", duration,
    "-c", "copy",
    output_file
]

result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
    print("FFmpeg 错误:", result.stderr)
else:
    print(f"裁剪完成:{output_file}")
package main

import (
	"fmt"
	"os/exec"
)

func main() {
	// 使用 FFmpeg 裁剪视频,从第 10 秒开始持续 10 秒,关键帧无损
	input := "input.mp4"
	output := "output_cut.mp4"

	cmd := exec.Command("ffmpeg",
		"-i", input,
		"-ss", "00:00:10",
		"-t", "00:00:10",
		"-c", "copy",
		output,
	)

	out, err := cmd.CombinedOutput()
	if err != nil {
		fmt.Printf("FFmpeg 错误: %v\n%s\n", err, string(out))
		return
	}
	fmt.Printf("裁剪完成:%s\n", output)
}
const { execSync } = require('child_process');

// 使用 FFmpeg 裁剪视频,从第 10 秒开始持续 10 秒,关键帧无损
const input = 'input.mp4';
const output = 'output_cut.mp4';
const start = '00:00:10';
const duration = '00:00:10';

try {
  execSync(
    `ffmpeg -i "${input}" -ss ${start} -t ${duration} -c copy "${output}"`,
    { stdio: 'pipe' }
  );
  console.log(`裁剪完成:${output}`);
} catch (err) {
  console.error('FFmpeg 错误:', err.stderr.toString());
}

常见问题

9 个高频疑问

这个视频剪辑工具,裁剪视频的时候会重新编码吗?我想保持原画质。
不会重新编码。工具底层调用 FFmpeg 的 -c copy 参数,对视频的起止时间点做关键帧对齐后直接复制数据流,不做任何帧内压缩或转码。这意味着输出视频的画质、码率、编码格式(H.264/H.265/VP9 等)与输入完全一致。但注意:如果起止时间点落在非关键帧位置,工具会自动对齐到最近的关键帧,导致实际裁剪范围比设定时间多出 0.5~2 秒(取决于视频的 GOP 结构)。想要精确到帧的裁剪,需要重编码,画质会下降。
为什么我裁剪出来的视频,时长和设定的不一样?多了几秒?
这是关键帧对齐机制导致的。视频文件为了压缩效率,内部按 GOP(画面组)存储,每组第一帧是关键帧(I 帧)。FFmpeg 在 -c copy 模式下只能从 I 帧开始切割,不能从任意帧开始。你设定的起始时间如果没有落在 I 帧上,工具会自动前移到最近的 I 帧,因此实际视频会比设定时长多出 0.5~2 秒。想精确到毫秒级裁剪,必须开启重编码(-c libx264),但画质会有损失。本工具为了保持无损,默认选择前者。
工具支持 MP4 以外的格式吗?比如 MOV、AVI、MKV?
支持。FFmpeg 底层支持几乎所有常见封装格式:MP4、MOV、MKV、AVI、FLV、WMV、WebM、TS、MTS 等。工具不会限制输入格式,只要浏览器能读取的文件(通常 ≤2GB)都可以上传处理。输出格式默认与输入一致。需要注意:如果输入是 MP4,输出也是 MP4;如果输入是 MOV,输出也是 MOV。不支持格式转换——想转格式的话,需要先用其他工具转换后再来裁剪。
在手机上能用吗?上传 4K 视频会不会卡死?
能在手机浏览器上用,但受限于 WASM 性能和浏览器内存上限。4K 视频(3840×2160)如果码率超过 50Mbps 或时长超过 10 分钟,在手机端上传和解析时容易出现浏览器崩溃或卡死。建议:① 在电脑端使用;② 如果必须用手机,先降低分辨率到 1080p 再上传;③ 单次裁剪尽量控制在 5 分钟以内。工具本身不限制文件大小,但浏览器端的内存限制(通常 2GB~4GB)决定了实际可用范围。
这个工具和电脑上的剪映、Pr 比,有什么优势?
核心优势是「零安装 + 无损裁剪」。剪映和 Premiere Pro 裁剪视频时默认会重新编码,画质有损且处理慢;本工具用 FFmpeg 关键帧无损复制,1 分钟视频裁剪只需 1~3 秒,画质 100% 保留。劣势是:① 只能做起止裁剪,不能加特效、字幕、转场;② 不支持精确到帧的裁剪(只能对齐关键帧);③ 不支持多轨道编辑。适合的场景:快速截取一段视频发给别人、去掉片头片尾、提取某段素材,不需要打开完整剪辑软件。
上传的视频会保存在服务器上吗?隐私安全吗?
不会保存。所有视频处理完全在浏览器本地完成(通过 WASM 运行 FFmpeg),视频数据不会上传到任何服务器。可以验证:打开浏览器开发者工具(F12)→ Network 标签,点击裁剪按钮后观察是否有文件上传请求——没有。处理完成后,生成的新视频直接通过浏览器下载到本地,服务器不存任何副本。关闭页面后,浏览器内存中的临时数据也会被自动清除。断网状态下工具仍能正常工作,进一步证明无网络传输。
为什么我上传后提示「文件太大无法处理」?最大支持多大?
工具本身不设文件大小上限,限制来自浏览器的内存分配能力。Chrome 单标签页默认可用内存约 2GB(64 位系统),Firefox 约 4GB。一个 10 分钟的 1080p 视频(H.264 编码,码率 10Mbps)约 750MB,浏览器可以正常处理。但如果视频超过 1.5GB(例如 30 分钟 4K 素材),浏览器可能因内存不足崩溃。建议:① 先用其他工具压缩体积;② 分多次裁剪;③ 换用电脑端的 Chrome(比手机浏览器更稳定)。如果频繁遇到,可以尝试关闭其他标签页释放内存。
裁剪后视频的音频会同步吗?会不会出现音画不同步?
不会,音画完全同步。FFmpeg 的 -c copy 模式会同时复制视频流和音频流,不会重新编码,因此时间戳保持不变。唯一可能导致不同步的情况是:输入视频本身存在音画不同步问题(例如录制时产生的偏移),裁剪后该偏移会被原样保留。如果输入视频是正常的,裁剪后的音画同步精度在毫秒级,人耳无法感知。
我只需要截取视频中间一小段,不想下载整个视频再裁剪,可以吗?
可以。本工具支持设置「起始时间」和「结束时间」两个输入框,输入具体时间(格式为 时:分:秒,例如 00:01:30 到 00:02:15),工具只处理这两个时间点之间的片段,不会先下载完整视频再处理。但注意:由于前文提到的关键帧对齐机制,实际输出的起始点可能比设定值早 0.5~2 秒。如果对时间精度要求极高(比如卡点截取),建议先用其他工具将视频转为逐帧编码(如 ProRes 或 DNxHD)后再裁剪。
选择 打开 +新窗口 esc关闭