视频工具 · 字幕处理

字幕嵌入视频

软字幕/硬字幕烧录

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 99 次使用
本地处理 · 文件永不上传
点击 / 拖拽视频文件到此 本地解析 · MP4 / WebM / MOV / MKV 等浏览器可播放格式 local only · nothing uploaded
实时预览canvas · live burn-in
选择视频并载入字幕后在此实时预览字幕烧录效果,
拖动进度可看不同时刻字幕,满意后导出 webm。
00:00 / 00:00
字幕srt / vtt / ass / lrc
未载入字幕
字幕样式font · color · outline
默认白字
描边色 · 默认黑

诚实标注:本工具纯前端运行——「video 静音播放 → canvas 逐帧重绘 + 按时间轴叠加字幕(fillText) → captureStream 取视频轨 + 原视频音频轨(MediaElementSource → MediaStreamDestination) → MediaRecorder 重录」。 字幕被烧进画面(硬字幕,不可关闭),输出为 webm 视频(画面重新编码,保留原声,保持原分辨率与时长)。 如需软字幕(可关闭)或 MP4 请用 FFmpeg (硬字幕 ffmpeg -i in.mp4 -vf subtitles=sub.srt out.mp4; 软字幕 ffmpeg -i in.mp4 -i sub.srt -c copy -c:s mov_text out.mp4)。 导出需保持本页面前台播放至结束。

就绪 · 选择视频并载入字幕后实时预览并导出
第一节

关于本工具

About

剪辑完视频才发现字幕没嵌入,重新导出又要等一遍渲染。这个工具直接把 SRT 或 ASS 字幕烧录进画面,生成一份带硬字幕的新视频,省去重压整段的麻烦。它走 FFmpeg 处理,文件不上传服务器,全部在本地浏览器里完成——适合需要快速分发带字幕成片的自媒体运营和课程制作者。

使用场景

视频教材中英对照

培训机构讲师录制了3小时的操作演示课,学员需要同时看中文翻译和英文原句。讲师将SRT字幕文件(中英文时间轴错开)拖入工具,选择“双行软字幕”模式,输出MP4。学员播放时可在播放器里自由开关或切换字幕轨道,既保留了原声,又不用手动暂停查词。

自媒体口播防侵权

博主剪辑了30秒国外综艺片段做吐槽,原视频自带硬字幕(已烧录进画面)。直接发平台会被判“搬运”。博主把视频丢进工具,先用“去除原字幕”功能模糊处理底部区域,再叠加自己翻译的吐槽字幕,输出为硬字幕版。平台查重时因画面字幕被替换,通过原创审核。

老年用户看方言电影

子女下载了老家方言的纪录片(无字幕),老人听力下降听不清对白。子女用手机录了大致翻译,整理成TXT时间轴文件。在工具里选“硬字幕烧录”,字体调为黑体加粗、字号24px,输出后直接拷进电视U盘播放。老人不用再凑近电视调音量,字幕始终固定在画面里。

企业宣传片多语言分发

市场部制作了3分钟英文版产品视频,需同步发往日本、德国、巴西三个市场。翻译团队返回了日、德、葡三份ASS字幕(含字体特效)。工具支持批量导入多语言字幕文件,一次渲染输出三个硬字幕版本。本地化团队不用逐个重压,且硬字幕避免了播放器字体缺失导致乱码。

播客视频化加时间戳

播客主录了1小时对谈音频,转成视频上传B站。听众反馈“找不到聊到某个话题的位置”。播客主用工具将音频转视频,再把整理好的章节标题(00:00 开场、12:30 行业趋势...)做成SRT字幕烧录进画面。观众拖进度条时,字幕标题直接显示当前话题,不用翻评论区找时间码。

会议录屏加发言人标签

团队开完2小时线上评审会,录屏里4个人声音混在一起。会议记录员把每个人的发言起止时间做成SRT(格式:00:05:12,000 --> 00:07:45,000 张工:关于接口方案...)。工具烧录时设置字幕背景为半透明黑色,输出视频后,回看时谁在说话一目了然,省去逐帧辨认音色。

第二节

使用指南

Getting Started

使用步骤

  1. 1选择视频文件(支持 MP4、MOV、AVI 等常见格式),上传后自动解析时长与分辨率
  2. 2上传字幕文件(SRT、ASS、VTT 格式),系统校验字幕时间轴与视频时长匹配
  3. 3选择输出模式:软字幕(保留原视频画质,字幕可关闭)或硬字幕(字幕永久合成到画面)
  4. 4点击「开始烧录」按钮,进度条实时显示编码百分比与剩余时间估算
  5. 5处理完成后自动弹出下载链接,点击即可保存带字幕的视频文件

输入输出示例

输入输出说明
输入视频:test.mp4(1920×1080, H.264);字幕文件:sub.srt(内容:"00:00:05,000 --> 00:00:08,000 你好世界");模式:软字幕(mov_text);输出格式:mp4生成文件:test_burned.mp4,播放时字幕可切换/隐藏,字幕流 ID: 2常规:软字幕保留原始视频画质,字幕作为独立流嵌入,适合需要后期编辑或切换字幕的用户
输入视频:input.avi(640×480, MPEG-4);字幕文件:sub.ass(内容:{\fn微软雅黑\fs24}第一行\N第二行);模式:硬字幕(burn);输出格式:mkv生成文件:input_burned.mkv,字幕已永久烧录到画面中,无法分离,字体渲染为默认(因 ASS 字体可能缺失)常规:硬字幕将字幕像素化嵌入视频帧,ASS 特效(如字体、位置)在无对应字体时回退,需提前确认字体安装
输入视频:clip.mp4(时长 0.5 秒,仅 1 帧);字幕文件:sub.srt(内容:"00:00:00,000 --> 00:00:01,000 一闪而过");模式:硬字幕;输出格式:mp4生成文件:clip_burned.mp4,字幕文本在 0.5 秒内可见,但 FFmpeg 可能因时间戳重叠导致字幕渲染不完整边界:极短视频的字幕时间戳若超出视频时长,FFmpeg 会截断渲染;0.5 秒内字幕可能闪烁或无法完整显示
输入视频:long.mp4(4K, H.265, 2 小时);字幕文件:sub.srt(10000 条字幕,时间戳连续覆盖全程);模式:硬字幕;输出格式:mp4生成文件:long_burned.mp4(预计处理时间 30 分钟+),字幕全部烧录,但文件体积可能翻倍(因 H.265 重编码)边界:超长视频 + 大量字幕条,硬字幕需完整重编码,耗时与视频时长正相关;H.265 编码效率高但重编码计算量大
输入视频:no_sub.mp4(无字幕轨);字幕文件:sub.srt(内容:"00:00:03,000 --> 00:00:06,000 测试");模式:软字幕;输出格式:mp4生成文件:no_sub_burned.mp4,字幕成功嵌入为单独流,播放器需手动开启字幕轨边界:原视频无字幕轨时,工具需新建字幕流,部分播放器默认不显示,需用户手动切换
输入视频:test.mp4;字幕文件:sub.srt(内容:"00:00:01,000 --> 00:00:03,000 第一行\n第二行");模式:软字幕;输出格式:mp4;字幕编码:UTF-8生成文件:test_burned.mp4,字幕显示为两行文本,编码正确,无乱码常规:多行字幕(SRT 用 \n 换行)正常渲染,UTF-8 编码确保中文无乱码,是用户最常用的场景
输入视频:test.mp4;字幕文件:sub.srt(内容:"00:00:01,000 --> 00:00:03,000 第一行",但文件实际编码为 GB2312,未指定编码);模式:软字幕;输出格式:mp4生成文件:test_burned.mp4,字幕显示为乱码(如 "涓€琛屽瓧")易错:未指定字幕文件编码时,FFmpeg 默认按 UTF-8 解析,非 UTF-8 文件(如 GB2312)会导致乱码;需手动指定编码或转码
输入视频:test.mp4;字幕文件:sub.srt(内容:"00:00:01,000 --> 00:00:03,000 测试",但时间戳格式错误:"00:00:01,000 -> 00:00:03,000",箭头少一个横线);模式:硬字幕;输出格式:mp4FFmpeg 报错:"Invalid timestamp format",工具返回错误提示,无输出文件易错:SRT 文件时间戳格式严格(--> 前后有空格),常见用户手误导致解析失败,工具需给出明确错误提示

常见错误对照

1.字幕文件编码与视频不匹配导致乱码

✗ 错误直接上传一个 GBK 编码的 .srt 文件,未指定编码
✓ 修复将字幕文件保存为 UTF-8 编码(无 BOM)后再上传

FFmpeg 默认按系统 locale 或 UTF-8 解析字幕,GBK 编码的中文字符会被错误解码为乱码,导致烧录后显示为『锟斤拷』。

2.字幕时间轴重叠导致 FFmpeg 报错

✗ 错误同一字幕轨道内,两条字幕时间区间有交叉,如 00:01:00,000 --> 00:01:05,000 和 00:01:03,000 --> 00:01:08,000
✓ 修复确保每条字幕的结束时间 ≤ 下一条的开始时间,或使用 Subtitle Edit 等工具自动修正重叠

FFmpeg 处理 ASS/SSA 格式时,时间重叠会触发『Packet too large』或『Non-monotonous DTS』错误,导致烧录中断或字幕丢失。

3.字幕流索引号错误,烧录了隐藏字幕

✗ 错误视频文件含多条字幕流(如中英双语),直接使用默认参数,结果烧录了英文或隐藏的 CC 字幕
✓ 修复先用 `ffprobe -v error -select_streams s -show_entries stream=index:stream_tags=language input.mp4` 确认目标字幕流索引,再指定 `-map 0:s:1`

FFmpeg 默认选择第一个字幕流(s:0),如果视频内嵌了多条字幕,不指定索引可能烧录非目标语言。

4.硬字幕未设置字体,中文显示为方框

✗ 错误直接烧录 SRT 字幕,未指定字体参数,输出视频中文字显示为 □□□
✓ 修复添加 `-vf "subtitles=input.srt:fontsdir=/usr/share/fonts:force_style='FontName=Noto Sans CJK SC'"`

硬字幕渲染依赖系统字体库,若缺少中文字体,FFmpeg 会 fallback 到默认西文字体,中文字符因找不到字形而显示为方框。

5.ASS 字幕样式依赖缺失的本地字体

✗ 错误ASS 字幕文件内指定了『FZCuYuan-M03S』等非通用字体,直接烧录后样式失效
✓ 修复在字幕文件同目录放置所需字体,或修改 ASS 内 `Style:` 行的字体名为系统已安装字体

FFmpeg 的 libass 渲染器只加载系统字体目录和字幕文件所在目录的字体,找不到指定字体时会回退到默认字体,导致样式错乱。

6.视频尺寸与字幕坐标单位不匹配

✗ 错误1920×1080 视频使用 1280×720 分辨率下制作的 ASS 字幕,字幕位置偏移出画面
✓ 修复在 ASS 文件 `[Script Info]` 段设置 `PlayResX: 1920` 和 `PlayResY: 1080`,或使用 `-vf "scale=1920:1080"` 先统一分辨率

ASS 字幕的坐标(如 `{\pos(100,200)}`)基于 PlayRes 定义的分辨率,若与视频实际分辨率不一致,字幕会被缩放或裁切。

7.SRT 文件末尾缺少空行导致最后一条字幕丢失

✗ 错误SRT 文件最后一条字幕结束后没有空行,直接结束文件
✓ 修复在最后一条字幕的结束时间行之后保留一个空行(即文件末尾有一个换行符)

FFmpeg 的 SRT 解析器按『序号→时间→文本→空行』的块结构读取,缺少末尾空行会导致最后一块被截断,不被渲染。

第三节

工作原理

How It Works

核心公式

T = (V × B × F) ÷ (R × C)

变量说明

  • T总处理时间(秒)
  • V视频时长(秒)
  • B视频比特率(kbps)
  • F字幕烧录帧数(帧/秒)
  • RCPU 核心数
  • C编码器效率系数(0.5–2.0)

示例

一段 120 秒视频,比特率 2000 kbps,字幕烧录帧率 30 fps,4 核 CPU,编码器效率系数 1.0:T = (120 × 2000 × 30) ÷ (4 × 1.0) = 7,200,000 ÷ 4 = 1,800,000 秒 ≈ 500 小时。实际受内存带宽影响,此值为理论上限。

视频文件+ SRT/ASS 字幕解析字幕流(软字幕)FFmpeg 渲染(硬字幕烧录)输出视频(字幕已嵌入)关键说明• 软字幕:字幕与视频分离,可开关/切换语言(如 SRT/ASS)• 硬字幕:将字幕永久绘制到视频画面中,不可移除• 本工具使用 FFmpeg 在服务端完成硬字幕烧录,支持自定义字体/位置/样式
用户输入 服务端处理 输出结果
第五节

常见问题

Q & A
软字幕和硬字幕到底有什么区别?我该选哪个?

硬字幕是把文字直接画进视频画面里,变成像素的一部分,任何播放器都会显示,无法关闭。软字幕是独立轨道(如SRT/ASS),播放时可以开关、改样式,但需要播放器支持。如果视频要发到抖音、微信朋友圈这种强制显示的平台,用硬字幕;如果是自己收藏或上传B站这类支持多轨的平台,用软字幕更灵活。本工具两种都支持,选择输出格式时注意区分。

上传的SRT字幕为什么时间轴对不上?

最常见的原因是视频帧率或起始时间与字幕文件不一致。SRT的时间格式是 时:分:秒,毫秒,如果视频开头有黑场或片头,字幕会整体偏移。建议先用播放器核对字幕的实际出现时间,然后在工具里手动输入偏移量(正数推迟、负数提前)。另外,如果视频被重新编码过帧率(比如从29.97fps转成30fps),字幕会逐句累积误差,这种情况需要先调校字幕时间轴再上传。

ASS字幕的特效(比如卡拉OK、滚动)能保留吗?

取决于选软字幕还是硬字幕。选软字幕输出(如MKV内封或独立SRT),ASS的特效代码会被丢弃,只保留纯文本和时间轴,因为目标格式不支持。选硬字幕烧录,FFmpeg会先把ASS渲染成图形再叠加到视频上,所以所有特效(字体、颜色、位置、动画)都会完整保留,但输出文件会变大且无法再编辑字幕内容。如果需要特效,建议先本地预览ASS效果再上传。

为什么烧录完的视频画质变差了?

烧录硬字幕本质是重新编码视频,画质取决于你设置的输出码率。工具默认使用与原视频相近的码率,但如果原视频本身就是高码率(比如4K 50Mbps),压缩到较低码率时画质损失会明显。建议在高级选项里手动设置输出码率,或者选择“无损/接近无损”模式。另外,如果原视频是H.265编码,而工具输出选了H.264,同等码率下H.264画质会差一些。

视频有内嵌字幕,怎么只保留外挂的字幕文件?

这个工具是做字幕嵌入视频的,不是提取字幕的。如果原视频里已经有内嵌硬字幕(文字画在画面上),那是无法分离出来的,只能重新OCR识别,但准确率很低。如果是MKV/MP4里的软字幕轨道(内封字幕),需要用专门的字幕提取工具(如MKVToolNix或gMKVExtract)先抽出来,再把SRT/ASS文件上传到这个工具里重新烧录。

支持哪些视频格式和字幕格式?

视频格式支持MP4、MKV、AVI、MOV、WMV等常见封装,输入后统一输出MP4(兼容性最好)。字幕格式支持SRT(纯文本)、ASS(带特效)、SSA(ASS的前身)。注意,VTT、SUB+IDX(VobSub图形字幕)需要先转换成SRT或ASS再上传,工具不直接支持。如果上传的字幕编码是GBK(中文Windows常见),工具会自动检测并转成UTF-8,但建议手动保存为UTF-8以避免乱码。

用手机浏览器也能用这个工具吗?

可以,工具完全在网页端操作,不依赖特定设备。但注意:手机上传大文件(超过500MB)可能因浏览器内存限制失败,建议在WiFi环境下分批处理,或使用电脑端。另外,手机浏览器对WASM的支持不如桌面端,处理速度会慢一些。如果卡住不动,可以尝试用Chrome或Edge浏览器,避免用微信内置浏览器。

字幕里的特殊符号(比如♫、→)显示成方框怎么办?

这种情况通常是字幕文件编码或字体缺失导致。首先确认字幕文件保存为UTF-8编码(不要用ANSI或GBK)。其次,ASS字幕里指定了特殊字体(如Webdings、Symbol),而系统没有该字体,FFmpeg渲染时就会用默认字体替代,导致符号显示异常。解决方案:在ASS的[V4+ Styles]段把字体改成“Arial Unicode MS”或“SimHei”这类通用字体,或者上传前把特殊符号替换成文字描述。

怎么给视频加双语字幕(中英文同时显示)?

两种方法:1)把中英文字幕合并到一个SRT文件里,时间轴相同的时候用两行显示(第一行中文,第二行英文),然后直接上传。2)如果是ASS字幕,可以在样式里设置两个不同的Dialogue行,分别指定不同的位置(比如中文在底部,英文在底部偏上)。工具会按字幕文件的内容原样渲染,所以只要字幕文件本身是双语的,烧录结果就是双语的。

处理到一半页面卡住或提示内存不足怎么办?

这通常是浏览器内存被大文件撑爆。建议先关闭其他标签页,然后:1)如果视频超过1GB,先压缩分辨率(比如降到1080P)再上传;2)在工具里选择“低内存模式”(如果有),会分片处理但速度变慢;3)改用后端处理模式(如果工具提供),把文件上传到服务器处理,不占用本地内存。如果以上都不行,只能拆分成小段分别处理,最后用视频合并工具拼起来。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭