← 博客

如何使用FFmpeg剪切和裁剪视频:时间戳、时长与分割(2026年指南)

学习如何使用FFmpeg通过精确的时间戳和时长控制来剪切、裁剪和分割视频。包含快速复制模式、重新编码,以及免费一键替代方案。

3 min read

需要从长视频中截取30秒片段?去掉录像开头的10秒?将视频分割成多个部分?FFmpeg 可以通过命令行完成所有这些操作——只要你知道正确的参数。

本指南涵盖了各种裁剪场景及精确命令。如果你更喜欢拖动滑块来操作,文末还介绍了一个免费的可视化替代方案


前提条件:安装 FFmpeg

FFmpeg

macOS:

brew install ffmpeg

Ubuntu/Debian:

sudo apt update && sudo apt install ffmpeg

Windows:ffmpeg.org 下载,解压后将 bin 目录添加到 PATH。


基本裁剪

按起始时间和时长裁剪

从1分钟处开始截取30秒:

ffmpeg -i input.mp4 -ss 00:01:00 -t 00:00:30 -c copy output.mp4
  • -ss 00:01:00 — 从1分钟处开始
  • -t 00:00:30 — 时长30秒
  • -c copy — 直接复制流,无需重新编码(速度快)

按起始和结束时间裁剪

截取1:00到2:30的片段:

ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c copy output.mp4
  • -to 00:02:30 — 在2分30秒处停止

截取前N秒

只保留前60秒:

ffmpeg -i input.mp4 -t 60 -c copy output.mp4

删除前N秒

跳过前10秒:

ffmpeg -i input.mp4 -ss 10 -c copy output.mp4

截去末尾N秒

这需要知道视频总时长。对于5分钟的视频,若要删除最后30秒:

ffmpeg -i input.mp4 -t 00:04:30 -c copy output.mp4

快速复制 vs 重新编码

快速模式(-c copy

ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -c copy output.mp4

优点: 即时完成,无质量损失 缺点: 可能在指定时间戳前几秒开始(在最近的关键帧处裁剪)

精确模式(重新编码)

ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -c:v libx264 -c:a aac output.mp4

优点: 逐帧精确裁剪 缺点: 速度较慢,重新编码会有轻微质量损失

两全其美:输入定位 + 输出重编码

ffmpeg -ss 00:00:58 -i input.mp4 -ss 2 -t 30 -c:v libx264 -c:a aac output.mp4

此命令在解码前先定位到0:58(速度快),然后精确跳过2秒,从而准确到达1:00。


将视频分割为多个部分

分割为等长片段

将10分钟视频分割为2分钟片段:

ffmpeg -i input.mp4 -c copy -map 0 -segment_time 120 -f segment -reset_timestamps 1 segment_%03d.mp4

这将生成 segment_000.mp4segment_001.mp4 等文件。

按指定时间戳分割

# 第1段:0:00 到 2:00
ffmpeg -i input.mp4 -ss 0 -to 00:02:00 -c copy part1.mp4

# 第2段:2:00 到 5:00
ffmpeg -i input.mp4 -ss 00:02:00 -to 00:05:00 -c copy part2.mp4

# 第3段:5:00 到结尾
ffmpeg -i input.mp4 -ss 00:05:00 -c copy part3.mp4

提取和去除音频

仅提取音轨

ffmpeg -i input.mp4 -vn -c:a copy audio.m4a
  • -vn — 不含视频

提取为 MP3

ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 320k audio.mp3

去除音频(仅保留视频)

ffmpeg -i input.mp4 -an -c:v copy output_silent.mp4
  • -an — 不含音频

常见错误及解决方法

裁剪后视频开头出现画面冻结或异常

这是在使用 -c copy 时,裁剪点不在关键帧上导致的。解决方法是重新编码:

ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -c:v libx264 -c:a aac output.mp4

裁剪后音视频不同步

添加 -avoid_negative_ts make_zero

ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -c copy -avoid_negative_ts make_zero output.mp4

出现 “Non-monotonous DTS” 警告

这类警告通常不影响输出,但表示存在时间戳问题。如果输出文件损坏,执行:

ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -fflags +genpts -c copy output.mp4

裁剪偏差达数秒

-ss 放在 -i 之前可加快定位速度,放在 -i 之后则更精确:

# 更快但精度较低(在输入端定位)
ffmpeg -ss 00:01:00 -i input.mp4 -t 30 -c copy output.mp4

# 更慢但逐帧精确(解码后再定位)
ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -c:v libx264 -c:a aac output.mp4

跳过命令行:改用 WaveSpeed Desktop

使用 FFmpeg 进行精确视频裁剪,意味着需要处理时间戳格式、关键帧对齐、复制与重编码的取舍,以及音视频同步问题。对大多数人来说,这远比实际需要复杂得多。

WaveSpeed Desktop 内置了带有可视化时间轴的媒体裁剪工具

  • 拖放视频文件
  • 通过可视化滑块设置起始和结束点
  • 点击裁剪——完成

无需计算时间戳,无需处理关键帧问题,无需使用终端。

WaveSpeed Desktop Media Trimmer

免费下载 WaveSpeed Desktop: https://github.com/WaveSpeedAI/wavespeed-desktop/releases


常见问题

-t-to 有什么区别? -t 指定时长(例如 -t 30 表示30秒)。-to 指定结束时间戳(例如 -to 00:02:30 表示在2:30处停止)。

裁剪时能不损失质量吗? 可以——使用 -c copy 避免重新编码。代价是裁剪可能不精确到帧(会对齐到最近的关键帧)。

如何获取视频的精确时长?

ffprobe -v error -show_entries format=duration -of csv=p=0 input.mp4

能同时裁剪多个文件吗? 单条命令无法实现。需要对每个文件使用 shell 循环。WaveSpeed Desktop 支持通过拖放进行批量裁剪。