zenconverter 中文文档 下载 App

SRT/VTT/LRC/ASS 四向互转管线

四种格式的定位

格式常见用途引擎
SRT视频字幕最通用的格式,几乎所有播放器都支持FFmpeg
VTTWeb 标准字幕格式(Web Video Text Tracks),浏览器原生支持FFmpeg
ASS高级字幕格式(Advanced SubStation Alpha),支持样式/定位/特效FFmpeg
LRC歌词格式,时间戳+歌词,最常见的音频歌词格式纯 Kotlin(自研)

四种格式覆盖了视频字幕和音频歌词两大场景。SRT/VTT/ASS 都是视频字幕生态里的,LRC 是音频歌词生态里的。

六种互转方向

ZenConverter 支持六种跨格式互转(不含同格式):

源 → 目标引擎关键处理
SRT ↔ VTT / ASSFFmpeg用 FFmpeg 的 subrip/webvtt/ass demuxer 和 muxer
VTT → LRCFFmpeg → 纯 KotlinVTT → SRT(FFmpeg)→ LRC(Kotlin 自研)
LRC → SRT / VTT / ASS纯 Kotlin → FFmpegLRC → SRT(Kotlin 自研)→ 目标格式(FFmpeg)
ASS → SRT / VTT / LRCFFmpeg / 纯 KotlinASS 样式和定位被丢弃(LRC 只保留文字)

所有走 FFmpeg 的路线都会在导出前探测 APK 里的 FFmpegKitNext AAR是否包含需要的 demuxer/muxer(srt、webvtt、ass)和 codec(subrip/webvtt/ass)。缺失就明确报错。

LRC 为什么需要自研引擎

FFmpeg 不原生支持 LRC 格式(LRC 是音频歌词格式,不是视频字幕格式)。所以 ZenConverter 写了纯 Kotlin 的 LRC 解析器和生成器。LRC 路线完全不依赖 FFmpeg。

不做同格式互转

这是一个故意的设计选择:ZenConverter 不提供"同格式互转"选项(比如 SRT → SRT)。原因是:

如果你有一个 SRT 想修正时间戳精度,直接用文本编辑器改就行。ZenConverter 做的是格式转换,不是字幕编辑。

已知边界

SRT 的时间戳 vs LRC 的时间戳

格式时间戳表达结束时间
SRThh:mm:ss,SSS明确有(用 --> 分隔)
VTThh:mm:ss.SSS明确有(用 --> 分隔)
ASShh:mm:ss.CC(百分秒)明确有
LRC[mm:ss.xx]没有,只有开始时间

LRC 只有开始时间这个事实,是 LRC → SRT/ASS/VTT 时需要合成结束时间的根本原因。

使用场景

场景推荐转换
视频字幕 SRT 想在 Safari 浏览器里显示SRT → VTT
从 MP3 提取 LRC 歌词想做成可编辑字幕LRC → SRT
ASS 字幕想去掉样式(比如给播放器自己加样式)ASS → SRT

相关页面