piapia123
zh

视频切片(导出 MP4)

音视频

所有处理都在浏览器本地完成,数据不上传服务器

把视频拖到这里,或点击选择

MP4 / MOV / WebM · 单个文件不超过 200 MB

把视频从第几秒到第几秒截出来,导出成一个真正的 MP4(H.264 画面 + AAC 声音),微信、剪辑软件、老设备都认。需要说清楚的是:这是重编码,不是无损切割。 真正的无损切割只能在关键帧上断开,而那需要把 MP4 拆开重算时间戳与偏移 —— 浏览器提供的 WebCodecs 只做编解码、不做解复用,所以这里走的是「逐帧解出 → 重新编码 → 封装」。好处是切的点是准确的(不受关键帧位置限制),代价是要跑一遍编码(10 秒的片段大约几秒)且有一代画质损失。进度条会告诉你跑到哪了。

功能

  • 截取任意时间段,精确到 0.1 秒
  • 导出真正的 MP4(H.264 + AAC),不是 WebM —— 微信与剪辑软件都认
  • 帧率可选 24 / 30 / 60 fps,画质三档
  • 声音默认保留,可关掉(比如只想要画面的片段)
  • 分辨率与原视频一致,不额外重采样
  • 逐帧 seek 取帧,结果是确定性的:机器忙不忙都不影响产物
  • H.264 配置从高到低自动挑选,浏览器支持哪个就用哪个
  • 浏览器没有 AAC 编码器时会明确说明「产物只有画面」,而不是悄悄丢掉声音
  • 浏览器不支持 WebCodecs 时明确报错并说明需要什么版本
  • 全部在浏览器本地完成,视频不上传

使用方法

  1. 把视频拖进来
  2. 填开始与结束时间(可以先在预览里拖到大致位置)
  3. 需要时调帧率与画质
  4. 点「开始」,等进度条跑完,下载 MP4

常见问题

为什么是「重编码」,不能无损切割吗?
无损切割要求只在关键帧上断开:中间那段压缩数据原样抄过去,不重新编码。做这件事需要把 MP4 容器拆开(解析样本表、重算时间戳与字节偏移),也就是一个完整的解复用器 —— 而浏览器给的 WebCodecs 只做编解码,不做解复用。所以在浏览器里能做的只有「解出每一帧 → 重新编码 → 封装」。代价是慢,且有一代画质损失;好处是切的点准确,不受关键帧位置限制(无损切割时,你要的第 7.3 秒可能因为最近的关键帧在第 6 秒而在第 6 秒断开)。需要无损时请用 ffmpeg 这类本地工具。
为什么这么慢?
因为要重新编码:先按帧率逐个 seek 取帧(每次 seek 都要等浏览器把该帧解出来),再逐帧编码、封装。10 秒 30 fps 的片段是 300 帧,即使每帧只花十几毫秒,加起来也是几秒。这个时间与视频的时长和帧率成正比,与实际文件大小关系不大。进度条会实时告诉你跑到哪一帧了。
导出的文件比原文件大?
很常见,而且合理:原视频可能是平台压过一遍的(码率很低),而这里按「每像素每帧的比特数」这个经验值重新编码,低画质档也比某些平台的压缩更宽松。想要小就选「低」画质、把帧率降到 24 —— 那两个开关对体积的影响最直接。反过来,原视频已经是高码率时,这里重编一次反而可能更小。
声音会丢吗?
默认保留。两种情况下会没有声音,而且工具都会明确告诉你:一是浏览器没有 AAC 编码器(罕见),二是原视频的音轨解不开(编码不受支持)。这两种都会在结果的说明里写出来,而不是让你导出后才发现是哑的。
哪些浏览器能用?
需要支持 WebCodecs 的浏览器:Chrome / Edge 94 以上、Safari 16.4 以上、Firefox 130 以上。不支持时工具会直接说明,而不是给一个降级的产物(比如偷偷导出 WebM)。这也是刻意的选择 —— 一个「看着导出了、拿去却打不开」的文件比明确的失败更糟。

相关工具