ffmpeg-captions-subtitles
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCRITICAL GUIDELINES
重要指南
Windows File Path Requirements
Windows文件路径要求
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes () in file paths, NOT forward slashes ().
\/强制要求:Windows系统下文件路径必须使用反斜杠
在Windows系统使用编辑或写入工具时,文件路径必须使用反斜杠(),不能使用正斜杠()。
\/Documentation Guidelines
文档规范
NEVER create new documentation files unless explicitly requested by the user.
除非用户明确要求,否则绝不创建新的文档文件。
Quick Reference
快速参考
| Task | Command |
|---|---|
| Burn SRT | |
| Burn ASS | |
| Add soft sub | |
| Extract sub | |
| Style subs | |
| Text overlay | |
| Format | Extension | Best For |
|---|---|---|
| SRT | .srt | Simple, universal |
| ASS | .ass | Styled, animated, anime |
| VTT | .vtt | Web/HTML5 video |
| 任务 | 命令 |
|---|---|
| 硬嵌入SRT字幕 | |
| 硬嵌入ASS字幕 | |
| 添加软字幕 | |
| 提取字幕 | |
| 设置字幕样式 | |
| 添加文本叠加层 | |
| 格式 | 扩展名 | 适用场景 |
|---|---|---|
| SRT | .srt | 简单通用 |
| ASS | .ass | 带样式、动画,适用于动漫 |
| VTT | .vtt | 网页/HTML5视频 |
When to Use This Skill
适用场景
Use for subtitle and caption operations:
- Hardcoding (burning) subtitles into video
- Adding soft subtitle tracks to containers
- Extracting subtitles from MKV/MP4
- Styling captions (font, color, position)
- Dynamic text overlays
适用于以下字幕与隐藏式字幕操作:
- 将字幕硬嵌入(烧录)到视频中
- 向容器添加软字幕轨道
- 从MKV/MP4中提取字幕
- 设置字幕样式(字体、颜色、位置)
- 添加动态文本叠加层
FFmpeg Captions and Subtitles (2025)
FFmpeg字幕与隐藏式字幕指南(2025版)
Complete guide to working with subtitles, closed captions, and text overlays using FFmpeg.
使用FFmpeg处理字幕、隐藏式字幕和文本叠加层的完整指南。
Subtitle Format Reference
字幕格式参考
Supported Formats
支持的格式
| Format | Extension | Features | Use Case |
|---|---|---|---|
| SubRip | .srt | Simple timing + text | Universal, web |
| Advanced SubStation Alpha | .ass/.ssa | Rich styling, positioning, effects | Anime, styled subs |
| WebVTT | .vtt | Web standard, cues, styling | HTML5 video |
| TTML/DFXP | .ttml/.dfxp | Broadcast, accessibility | Streaming services |
| MOV Text | .mov (embedded) | QuickTime native | Apple ecosystem |
| DVB Subtitle | (embedded) | Bitmap-based | European broadcast |
| PGS | .sup | Blu-ray bitmap subtitles | Blu-ray |
| CEA-608/708 | (embedded) | Closed captions | US broadcast, streaming |
| 格式 | 扩展名 | 特性 | 适用场景 |
|---|---|---|---|
| SubRip | .srt | 简单时间轴+文本 | 通用、网页 |
| Advanced SubStation Alpha | .ass/.ssa | 丰富样式、定位、特效 | 动漫、带样式字幕 |
| WebVTT | .vtt | 网页标准、提示标记、样式 | HTML5视频 |
| TTML/DFXP | .ttml/.dfxp | 广播级、无障碍 | 流媒体服务 |
| MOV Text | .mov(内嵌) | QuickTime原生格式 | Apple生态系统 |
| DVB Subtitle | (内嵌) | 位图格式 | 欧洲广播 |
| PGS | .sup | 蓝光位图字幕 | 蓝光视频 |
| CEA-608/708 | (内嵌) | 隐藏式字幕 | 美国广播、流媒体 |
Format Characteristics
格式特性
bash
SRT (SubRip):
- Simple text-based format
- Supports basic HTML tags (<b>, <i>, <u>)
- Widely compatible
- No positioning or advanced styling
ASS/SSA:
- Advanced styling (fonts, colors, outlines)
- Precise positioning anywhere on screen
- Animation and effects support
- Karaoke timing
WebVTT:
- HTML5 standard format
- CSS-like styling
- Cue settings for positioning
- Speaker identificationbash
SRT (SubRip):
- 简单的文本格式
- 支持基础HTML标签(<b>, <i>, <u>)
- 兼容性广泛
- 不支持定位或高级样式
ASS/SSA:
- 高级样式(字体、颜色、轮廓)
- 可精确定位到屏幕任意位置
- 支持动画和特效
- 支持卡拉OK时间轴
WebVTT:
- HTML5标准格式
- 类CSS样式
- 支持提示标记定位
- 支持说话人识别Burning Subtitles (Hardcoding)
字幕硬嵌入(烧录)
Basic Subtitle Burn-in
基础字幕硬嵌入
bash
undefinedbash
undefinedBurn SRT subtitles
硬嵌入SRT字幕
ffmpeg -i video.mp4 -vf "subtitles=subs.srt" output.mp4
ffmpeg -i video.mp4 -vf "subtitles=subs.srt" output.mp4
Burn ASS/SSA subtitles (preserves styling)
硬嵌入ASS/SSA字幕(保留样式)
ffmpeg -i video.mp4 -vf "ass=subs.ass" output.mp4
ffmpeg -i video.mp4 -vf "ass=subs.ass" output.mp4
Burn subtitles from MKV container
从MKV容器中硬嵌入字幕
ffmpeg -i video.mkv -vf "subtitles=video.mkv" output.mp4
ffmpeg -i video.mkv -vf "subtitles=video.mkv" output.mp4
Burn specific subtitle track (index 0)
硬嵌入指定字幕轨道(索引0)
ffmpeg -i video.mkv -vf "subtitles=video.mkv:si=0" output.mp4
ffmpeg -i video.mkv -vf "subtitles=video.mkv:si=0" output.mp4
Burn subtitles with stream index
通过流索引硬嵌入字幕
ffmpeg -i video.mkv -vf "subtitles=video.mkv:stream_index=1" output.mp4
undefinedffmpeg -i video.mkv -vf "subtitles=video.mkv:stream_index=1" output.mp4
undefinedStyled Subtitle Burn-in
带样式的字幕硬嵌入
bash
undefinedbash
undefinedForce style (overrides subtitle styling)
强制设置样式(覆盖字幕原有样式)
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Outline=2,Shadow=1'"
output.mp4
-vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Outline=2,Shadow=1'"
output.mp4
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Outline=2,Shadow=1'"
output.mp4
-vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Outline=2,Shadow=1'"
output.mp4
Yellow subtitles with black outline
黄色字幕配黑色轮廓
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='FontSize=28,PrimaryColour=&H00FFFF,OutlineColour=&H000000,Outline=3'"
output.mp4
-vf "subtitles=subs.srt:force_style='FontSize=28,PrimaryColour=&H00FFFF,OutlineColour=&H000000,Outline=3'"
output.mp4
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='FontSize=28,PrimaryColour=&H00FFFF,OutlineColour=&H000000,Outline=3'"
output.mp4
-vf "subtitles=subs.srt:force_style='FontSize=28,PrimaryColour=&H00FFFF,OutlineColour=&H000000,Outline=3'"
output.mp4
Larger font for accessibility
大字体适配无障碍需求
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='FontSize=36,Bold=1'"
output.mp4
-vf "subtitles=subs.srt:force_style='FontSize=36,Bold=1'"
output.mp4
undefinedffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='FontSize=36,Bold=1'"
output.mp4
-vf "subtitles=subs.srt:force_style='FontSize=36,Bold=1'"
output.mp4
undefinedASS Style Parameters
ASS样式参数
| Parameter | Description | Example |
|---|---|---|
| FontName | Font family | |
| FontSize | Size in points | |
| PrimaryColour | Text color (AABBGGRR) | |
| SecondaryColour | Karaoke color | |
| OutlineColour | Outline/border color | |
| BackColour | Shadow/background color | |
| Bold | Bold text (0/1) | |
| Italic | Italic text (0/1) | |
| Underline | Underlined text (0/1) | |
| Outline | Outline width | |
| Shadow | Shadow depth | |
| Alignment | Position (numpad style) | |
| MarginL/R/V | Margins in pixels | |
| 参数 | 说明 | 示例 |
|---|---|---|
| FontName | 字体家族 | |
| FontSize | 字号(磅) | |
| PrimaryColour | 文本颜色(AABBGGRR格式) | |
| SecondaryColour | 卡拉OK高亮颜色 | |
| OutlineColour | 轮廓/边框颜色 | |
| BackColour | 阴影/背景颜色 | |
| Bold | 粗体(0/1) | |
| Italic | 斜体(0/1) | |
| Underline | 下划线(0/1) | |
| Outline | 轮廓宽度 | |
| Shadow | 阴影深度 | |
| Alignment | 位置(小键盘布局) | |
| MarginL/R/V | 边距(像素) | |
Color Format (ASS)
ASS颜色格式
text
ASS uses &HAABBGGRR format (Alpha, Blue, Green, Red):
- White: &HFFFFFF or &H00FFFFFF
- Black: &H000000 or &H00000000
- Yellow: &H00FFFF (00-Blue, FF-Green, FF-Red)
- Red: &H0000FF
- Blue: &HFF0000
- 50% transparent black: &H80000000text
ASS使用&AABBGGRR格式(Alpha, Blue, Green, Red):
- 白色:&HFFFFFF 或 &H00FFFFFF
- 黑色:&H000000 或 &H00000000
- 黄色:&H00FFFF(00-蓝色, FF-绿色, FF-红色)
- 红色:&H0000FF
- 蓝色:&HFF0000
- 50%透明度黑色:&H80000000Adding Subtitle Tracks (Soft Subs)
添加字幕轨道(软字幕)
Embed SRT as Track
嵌入SRT作为轨道
bash
undefinedbash
undefinedAdd SRT to MP4 (MOV text)
将SRT嵌入MP4(MOV文本格式)
ffmpeg -i video.mp4 -i subs.srt
-c copy -c:s mov_text
output.mp4
-c copy -c:s mov_text
output.mp4
ffmpeg -i video.mp4 -i subs.srt
-c copy -c:s mov_text
output.mp4
-c copy -c:s mov_text
output.mp4
Add SRT to MKV
将SRT嵌入MKV
ffmpeg -i video.mp4 -i subs.srt
-c copy -c:s srt
output.mkv
-c copy -c:s srt
output.mkv
ffmpeg -i video.mp4 -i subs.srt
-c copy -c:s srt
output.mkv
-c copy -c:s srt
output.mkv
Add SRT to WebM (WebVTT)
将SRT嵌入WebM(WebVTT格式)
ffmpeg -i video.webm -i subs.srt
-c copy -c:s webvtt
output.webm
-c copy -c:s webvtt
output.webm
undefinedffmpeg -i video.webm -i subs.srt
-c copy -c:s webvtt
output.webm
-c copy -c:s webvtt
output.webm
undefinedMultiple Subtitle Tracks
多语言字幕轨道
bash
undefinedbash
undefinedAdd multiple languages
添加多语言字幕
ffmpeg -i video.mp4 -i subs_en.srt -i subs_es.srt -i subs_fr.srt
-map 0:v -map 0:a -map 1 -map 2 -map 3
-c copy -c:s mov_text
-metadata:s:s:0 language=eng -metadata:s:s:0 title="English"
-metadata:s:s:1 language=spa -metadata:s:s:1 title="Spanish"
-metadata:s:s:2 language=fra -metadata:s:s:2 title="French"
output.mp4
-map 0:v -map 0:a -map 1 -map 2 -map 3
-c copy -c:s mov_text
-metadata:s:s:0 language=eng -metadata:s:s:0 title="English"
-metadata:s:s:1 language=spa -metadata:s:s:1 title="Spanish"
-metadata:s:s:2 language=fra -metadata:s:s:2 title="French"
output.mp4
ffmpeg -i video.mp4 -i subs_en.srt -i subs_es.srt -i subs_fr.srt
-map 0:v -map 0:a -map 1 -map 2 -map 3
-c copy -c:s mov_text
-metadata:s:s:0 language=eng -metadata:s:s:0 title="English"
-metadata:s:s:1 language=spa -metadata:s:s:1 title="Spanish"
-metadata:s:s:2 language=fra -metadata:s:s:2 title="French"
output.mp4
-map 0:v -map 0:a -map 1 -map 2 -map 3
-c copy -c:s mov_text
-metadata:s:s:0 language=eng -metadata:s:s:0 title="English"
-metadata:s:s:1 language=spa -metadata:s:s:1 title="Spanish"
-metadata:s:s:2 language=fra -metadata:s:s:2 title="French"
output.mp4
Add ASS subtitles to MKV (preserves styling)
将ASS字幕嵌入MKV(保留样式)
ffmpeg -i video.mp4 -i styled.ass
-map 0 -map 1
-c copy -c:s ass
output.mkv
-map 0 -map 1
-c copy -c:s ass
output.mkv
undefinedffmpeg -i video.mp4 -i styled.ass
-map 0 -map 1
-c copy -c:s ass
output.mkv
-map 0 -map 1
-c copy -c:s ass
output.mkv
undefinedSet Default Subtitle Track
设置默认字幕轨道
bash
undefinedbash
undefinedSet subtitle as default
设置字幕为默认轨道
ffmpeg -i video.mp4 -i subs.srt
-c copy -c:s mov_text
-disposition:s:0 default
output.mp4
-c copy -c:s mov_text
-disposition:s:0 default
output.mp4
ffmpeg -i video.mp4 -i subs.srt
-c copy -c:s mov_text
-disposition:s:0 default
output.mp4
-c copy -c:s mov_text
-disposition:s:0 default
output.mp4
Set forced subtitles (always display)
设置强制字幕(始终显示)
ffmpeg -i video.mp4 -i forced.srt
-c copy -c:s mov_text
-disposition:s:0 forced
output.mp4
-c copy -c:s mov_text
-disposition:s:0 forced
output.mp4
undefinedffmpeg -i video.mp4 -i forced.srt
-c copy -c:s mov_text
-disposition:s:0 forced
output.mp4
-c copy -c:s mov_text
-disposition:s:0 forced
output.mp4
undefinedExtracting Subtitles
提取字幕
Extract to External File
提取到外部文件
bash
undefinedbash
undefinedExtract first subtitle track to SRT
提取第一条字幕轨道为SRT格式
ffmpeg -i video.mkv -map 0:s:0 output.srt
ffmpeg -i video.mkv -map 0:s:0 output.srt
Extract specific subtitle stream
提取指定字幕流
ffmpeg -i video.mkv -map 0:s:1 output.srt
ffmpeg -i video.mkv -map 0:s:1 output.srt
Extract to ASS format
提取为ASS格式
ffmpeg -i video.mkv -map 0:s:0 output.ass
ffmpeg -i video.mkv -map 0:s:0 output.ass
Extract to WebVTT
提取为WebVTT格式
ffmpeg -i video.mkv -map 0:s:0 output.vtt
ffmpeg -i video.mkv -map 0:s:0 output.vtt
Extract all subtitle tracks
提取所有字幕轨道
ffmpeg -i video.mkv -map 0:s subs_%d.srt
undefinedffmpeg -i video.mkv -map 0:s subs_%d.srt
undefinedList Available Subtitle Tracks
列出可用字幕轨道
bash
undefinedbash
undefinedShow all streams including subtitles
显示所有流(包括字幕)
ffprobe -v error -show_entries stream=index,codec_name,codec_type:stream_tags=language,title
-of csv=p=0 video.mkv
-of csv=p=0 video.mkv
ffprobe -v error -show_entries stream=index,codec_name,codec_type:stream_tags=language,title
-of csv=p=0 video.mkv
-of csv=p=0 video.mkv
Show only subtitle streams
仅显示字幕流
ffprobe -v error -select_streams s
-show_entries stream=index,codec_name:stream_tags=language,title
-of csv=p=0 video.mkv
-show_entries stream=index,codec_name:stream_tags=language,title
-of csv=p=0 video.mkv
undefinedffprobe -v error -select_streams s
-show_entries stream=index,codec_name:stream_tags=language,title
-of csv=p=0 video.mkv
-show_entries stream=index,codec_name:stream_tags=language,title
-of csv=p=0 video.mkv
undefinedConvert Subtitle Formats
字幕格式转换
bash
undefinedbash
undefinedSRT to ASS
SRT转ASS
ffmpeg -i subs.srt subs.ass
ffmpeg -i subs.srt subs.ass
ASS to SRT (loses styling)
ASS转SRT(丢失样式)
ffmpeg -i subs.ass subs.srt
ffmpeg -i subs.ass subs.srt
SRT to WebVTT
SRT转WebVTT
ffmpeg -i subs.srt subs.vtt
ffmpeg -i subs.srt subs.vtt
WebVTT to SRT
WebVTT转SRT
ffmpeg -i subs.vtt subs.srt
undefinedffmpeg -i subs.vtt subs.srt
undefineddrawtext Overlays and Whisper AI Integration
drawtext叠加层与Whisper AI集成
Detailed examples for overlays (fonts, positioning, escaping, time expressions, boxes, outlines, animated text) and Whisper AI transcription / subtitle generation workflows live in . Load that reference when creating burned-in text graphics or generating subtitles from speech.
drawtextreferences/drawtext-and-whisper.md关于叠加层(字体、定位、转义、时间表达式、方框、轮廓、动态文本)和Whisper AI转录/字幕生成流程的详细示例,请查看。在创建烧录式文本图形或从语音生成字幕时,请加载该参考文档。
drawtextreferences/drawtext-and-whisper.mdCEA-608/708 Closed Captions
CEA-608/708隐藏式字幕
Extract Closed Captions
提取隐藏式字幕
bash
undefinedbash
undefinedExtract CEA-608 captions from ATSC stream
从ATSC流中提取CEA-608字幕
ffmpeg -f lavfi -i "movie=broadcast.ts[out0+subcc]" -map 0:1 captions.srt
ffmpeg -f lavfi -i "movie=broadcast.ts[out0+subcc]" -map 0:1 captions.srt
Extract from video with embedded CC
从内嵌字幕的视频中提取
ffmpeg -i video_with_cc.mp4
-filter_complex "[0:v]format=yuv420p[v];[0:v]crop=1:1:0:0[c]"
-map "[c]" -c:v libx264 -f null - 2>&1 | grep -A 1 "Closed caption"
-filter_complex "[0:v]format=yuv420p[v];[0:v]crop=1:1:0:0[c]"
-map "[c]" -c:v libx264 -f null - 2>&1 | grep -A 1 "Closed caption"
undefinedffmpeg -i video_with_cc.mp4
-filter_complex "[0:v]format=yuv420p[v];[0:v]crop=1:1:0:0[c]"
-map "[c]" -c:v libx264 -f null - 2>&1 | grep -A 1 "Closed caption"
-filter_complex "[0:v]format=yuv420p[v];[0:v]crop=1:1:0:0[c]"
-map "[c]" -c:v libx264 -f null - 2>&1 | grep -A 1 "Closed caption"
undefinedAdd CEA-608 Captions
添加CEA-608隐藏式字幕
bash
undefinedbash
undefinedEmbed CEA-608 captions (requires eia608 line)
嵌入CEA-608字幕(需要eia608线路)
ffmpeg -i video.mp4 -i captions.scc
-c:v libx264 -c:a copy
-vf "movie=captions.scc[captions];[0:v][captions]overlay"
output.mp4
-c:v libx264 -c:a copy
-vf "movie=captions.scc[captions];[0:v][captions]overlay"
output.mp4
undefinedffmpeg -i video.mp4 -i captions.scc
-c:v libx264 -c:a copy
-vf "movie=captions.scc[captions];[0:v][captions]overlay"
output.mp4
-c:v libx264 -c:a copy
-vf "movie=captions.scc[captions];[0:v][captions]overlay"
output.mp4
undefinedSubtitle Positioning
字幕定位
ASS Alignment Values
ASS对齐值
text
7 (top-left) 8 (top-center) 9 (top-right)
4 (mid-left) 5 (mid-center) 6 (mid-right)
1 (bottom-left) 2 (bottom-center) 3 (bottom-right)text
7(左上) 8(中上) 9(右上)
4(左中) 5(居中) 6(右中)
1(左下) 2(中下) 3(右下)Position Examples
定位示例
bash
undefinedbash
undefinedTop center subtitles
顶部居中字幕
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='Alignment=8,MarginV=20'"
output.mp4
-vf "subtitles=subs.srt:force_style='Alignment=8,MarginV=20'"
output.mp4
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='Alignment=8,MarginV=20'"
output.mp4
-vf "subtitles=subs.srt:force_style='Alignment=8,MarginV=20'"
output.mp4
Left-aligned subtitles
左对齐字幕
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='Alignment=1,MarginL=50,MarginV=30'"
output.mp4
-vf "subtitles=subs.srt:force_style='Alignment=1,MarginL=50,MarginV=30'"
output.mp4
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='Alignment=1,MarginL=50,MarginV=30'"
output.mp4
-vf "subtitles=subs.srt:force_style='Alignment=1,MarginL=50,MarginV=30'"
output.mp4
Right side for speaker identification
右侧显示用于说话人识别
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='Alignment=3,MarginR=50'"
output.mp4
-vf "subtitles=subs.srt:force_style='Alignment=3,MarginR=50'"
output.mp4
undefinedffmpeg -i video.mp4
-vf "subtitles=subs.srt:force_style='Alignment=3,MarginR=50'"
output.mp4
-vf "subtitles=subs.srt:force_style='Alignment=3,MarginR=50'"
output.mp4
undefinedMultiple Subtitle Positions
多字幕轨道定位
bash
undefinedbash
undefinedTwo subtitle tracks at different positions
两个字幕轨道分别显示在不同位置
ffmpeg -i video.mp4
-vf "[in]subtitles=speaker1.srt:force_style='Alignment=1,MarginL=50'[tmp];
[tmp]subtitles=speaker2.srt:force_style='Alignment=3,MarginR=50'"
output.mp4
-vf "[in]subtitles=speaker1.srt:force_style='Alignment=1,MarginL=50'[tmp];
[tmp]subtitles=speaker2.srt:force_style='Alignment=3,MarginR=50'"
output.mp4
undefinedffmpeg -i video.mp4
-vf "[in]subtitles=speaker1.srt:force_style='Alignment=1,MarginL=50'[tmp];
[tmp]subtitles=speaker2.srt:force_style='Alignment=3,MarginR=50'"
output.mp4
-vf "[in]subtitles=speaker1.srt:force_style='Alignment=1,MarginL=50'[tmp];
[tmp]subtitles=speaker2.srt:force_style='Alignment=3,MarginR=50'"
output.mp4
undefinedBatch Processing
批量处理
Burn Subtitles to Multiple Videos
批量给视频硬嵌入字幕
bash
#!/bin/bashbash
#!/bin/bashburn_subs_batch.sh
burn_subs_batch.sh
for video in *.mp4; do
base="${video%.mp4}"
if [ -f "${base}.srt" ]; then
ffmpeg -i "$video"
-vf "subtitles=${base}.srt:force_style='FontSize=24,Outline=2'"
-c:a copy
"output/${base}_subbed.mp4" fi done
-vf "subtitles=${base}.srt:force_style='FontSize=24,Outline=2'"
-c:a copy
"output/${base}_subbed.mp4" fi done
undefinedfor video in *.mp4; do
base="${video%.mp4}"
if [ -f "${base}.srt" ]; then
ffmpeg -i "$video"
-vf "subtitles=${base}.srt:force_style='FontSize=24,Outline=2'"
-c:a copy
"output/${base}_subbed.mp4" fi done
-vf "subtitles=${base}.srt:force_style='FontSize=24,Outline=2'"
-c:a copy
"output/${base}_subbed.mp4" fi done
undefinedConvert Subtitle Format Batch
批量转换字幕格式
bash
#!/bin/bashbash
#!/bin/bashconvert_subs.sh
convert_subs.sh
for srt in *.srt; do
base="${srt%.srt}"
ffmpeg -i "$srt" "${base}.vtt"
done
undefinedfor srt in *.srt; do
base="${srt%.srt}"
ffmpeg -i "$srt" "${base}.vtt"
done
undefinedTroubleshooting
故障排除
Common Issues
常见问题
"Unable to find a suitable output format"
bash
undefined“无法找到合适的输出格式”
bash
undefinedSpecify output format explicitly
显式指定输出格式
ffmpeg -i video.mkv -map 0:s:0 -f srt output.srt
**Garbled characters in subtitles**
```bashffmpeg -i video.mkv -map 0:s:0 -f srt output.srt
**字幕出现乱码**
```bashForce UTF-8 encoding
强制使用UTF-8编码
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:charenc=UTF-8"
output.mp4
-vf "subtitles=subs.srt:charenc=UTF-8"
output.mp4
**Font not found**
```bashffmpeg -i video.mp4
-vf "subtitles=subs.srt:charenc=UTF-8"
output.mp4
-vf "subtitles=subs.srt:charenc=UTF-8"
output.mp4
**找不到字体**
```bashSpecify fonts directory
指定字体目录
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:fontsdir=/path/to/fonts"
output.mp4
-vf "subtitles=subs.srt:fontsdir=/path/to/fonts"
output.mp4
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:fontsdir=/path/to/fonts"
output.mp4
-vf "subtitles=subs.srt:fontsdir=/path/to/fonts"
output.mp4
List available fonts
列出可用字体
fc-list : family | sort | uniq
**Subtitle timing offset**
```bashfc-list : family | sort | uniq
**字幕时间轴偏移**
```bashDelay subtitles by 2 seconds
将字幕延迟2秒
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:itsoffset=2"
output.mp4
-vf "subtitles=subs.srt:itsoffset=2"
output.mp4
ffmpeg -i video.mp4
-vf "subtitles=subs.srt:itsoffset=2"
output.mp4
-vf "subtitles=subs.srt:itsoffset=2"
output.mp4
Or use setpts to adjust
或使用setpts调整
ffmpeg -i subs.srt -itsoffset 2 delayed.srt
**Subtitle not showing on high-res video**
```bashffmpeg -i subs.srt -itsoffset 2 delayed.srt
**高分辨率视频中字幕不显示**
```bashScale subtitle rendering to video resolution
根据视频分辨率缩放字幕渲染
ffmpeg -i video_4k.mp4
-vf "subtitles=subs.srt:force_style='FontSize=48,Outline=3'"
output.mp4
-vf "subtitles=subs.srt:force_style='FontSize=48,Outline=3'"
output.mp4
undefinedffmpeg -i video_4k.mp4
-vf "subtitles=subs.srt:force_style='FontSize=48,Outline=3'"
output.mp4
-vf "subtitles=subs.srt:force_style='FontSize=48,Outline=3'"
output.mp4
undefinedVerification Commands
验证命令
bash
undefinedbash
undefinedCheck if subtitles are present
检查字幕是否存在
ffprobe -v error -select_streams s -show_entries stream=codec_name -of default=nw=1 video.mp4
ffprobe -v error -select_streams s -show_entries stream=codec_name -of default=nw=1 video.mp4
Count subtitle lines
统计字幕行数
grep -c "^[0-9]" subs.srt
grep -c "^[0-9]" subs.srt
Validate SRT format
验证SRT格式
ffmpeg -i subs.srt -f null -
undefinedffmpeg -i subs.srt -f null -
undefinedBest Practices
最佳实践
Accessibility
无障碍
- Use high contrast colors (white on dark, yellow on dark)
- Minimum font size of 24pt for standard video
- Include speaker identification for multiple speakers
- Position subtitles to avoid obscuring important visual content
- Keep lines short (42 characters max per line)
- Display duration: minimum 1 second, maximum 7 seconds per caption
- 使用高对比度颜色(深色背景配白色、深色背景配黄色)
- 标准视频字幕最小字号为24磅
- 多说话人场景需添加说话人标识
- 字幕位置应避免遮挡重要视觉内容
- 每行字幕长度不超过42个字符
- 字幕显示时长:每行最少1秒,最多7秒
Quality
质量
- Use ASS format for styled subtitles (anime, music videos)
- Use SRT for simple dialogue
- Use WebVTT for web delivery
- Preserve original styling when possible
- Test on target devices before distribution
- 带样式的字幕(动漫、音乐视频)使用ASS格式
- 简单对话使用SRT格式
- 网页分发使用WebVTT格式
- 尽可能保留原始样式
- 分发前在目标设备上测试
Performance
性能
- Burn subtitles only when necessary (streaming, compatibility)
- Prefer soft subs for archival and flexibility
- Use hardware encoding when burning subtitles to large files
- Process in parallel for batch operations
This guide covers FFmpeg subtitle and caption operations. For text overlays with shapes and graphics, see the shapes-graphics skill.
- 仅在必要时硬嵌入字幕(流媒体、兼容性需求)
- 存档和灵活处理优先选择软字幕
- 处理大文件硬嵌入字幕时使用硬件编码
- 批量操作采用并行处理
本指南涵盖FFmpeg字幕与隐藏式字幕操作。如需添加图形和形状的文本叠加层,请查看shapes-graphics技能文档。