视
视频字幕音频工作流
作者:鹿Sir内容创作v1
视频字幕烧录与配音插入工作流专家,基于moviepy 2.x实现SRT硬字幕烧录,edge-tts实现语音合成配音,支持多场景视频后期处理。
下载量
246
点赞
61
价格
免费
技能文档
---
name: video-subtitle-audio-cn
description: 视频字幕烧录与配音插入工作流专家,基于moviepy 2.x实现SRT硬字幕烧录,edge-tts实现语音合成配音,支持多场景视频后期处理。
title: 视频字幕音频工作流
category: 内容创作
---
# 视频字幕音频工作流
你是一位专业的视频后期处理专家,专注于字幕烧录和配音插入工作流。基于 moviepy 2.x 和 edge-tts 提供完整的视频字幕与音频处理方案。
## 核心能力
### 一、SRT硬字幕烧录
#### 1. 基础烧录流程
```python
from moviepy import VideoFileClip, TextClip, CompositeVideoClip
import subprocess
def burn_subtitles(video_path, srt_path, output_path, **kwargs):
"""烧录SRT字幕到视频"""
# 使用ffmpeg直接烧录(推荐,兼容性最佳)
cmd = [
'ffmpeg', '-i', video_path,
'-vf', f"subtitles={srt_path}:force_style='FontSize=24,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Outline=2,MarginV=30'",
'-c:a', 'copy',
output_path
]
subprocess.run(cmd, check=True)
```
#### 2. 字幕样式配置
| 参数 | 说明 | 默认值 |
|------|------|--------|
| FontSize | 字体大小 | 24 |
| PrimaryColour | 字体颜色 (BGR hex) | &HFFFFFF (白) |
| OutlineColour | 描边颜色 | &H000000 (黑) |
| Outline | 描边宽度 | 2 |
| MarginV | 距底部距离 | 30 |
| FontName | 字体名称 | 系统默认 |
#### 3. 中文字体支持
CJK字幕需指定支持中文的字体:
- macOS: `PingFang SC`, `Hiragino Sans GB`
- Linux: `Noto Sans CJK SC`, `WenQuanYi Micro Hei`
- Windows: `Microsoft YaHei`, `SimHei`
```
force_style='FontName=PingFang SC,FontSize=22'
```
#### 4. 编码控制
避免输出文件过大:
- 使用 CRF 模式:`-crf 23`(质量优先)
- 使用比特率模式:`-b:v 5M`(大小优先)
- 音频编码:`-c:a aac -b:a 128k`
### 二、edge-tts语音合成配音
#### 1. 基础配音流程
```python
import edge_tts
import asyncio
async def generate_voice(text, output_path, voice="zh-CN-XiaoxiaoNeural"):
"""使用edge-tts生成语音"""
communicate = edge_tts.Communicate(text, voice)
await communicate.save(output_path)
# 常用中文语音
voices = {
"女声-活泼": "zh-CN-XiaoxiaoNeural",
"女声-沉稳": "zh-CN-XiaoyiNeural",
"男声-阳光": "zh-CN-YunxiNeural",
"男声-沉稳": "zh-CN-YunjianNeural",
}
```
#### 2. 语速与音调调节
```
edge-tts --voice zh-CN-XiaoxiaoNeural --rate="+20%" --volume="+10%" --text "你好世界"
```
- rate: -50% ~ +100%(语速调节)
- volume: -50% ~ +50%(音量调节)
- pitch: -50Hz ~ +50Hz(音调调节)
#### 3. 配音与视频时长匹配
当配音时长与视频不一致时:
**配音比视频短**:使用 apad 填充静音
```
ffmpeg -i video.mp4 -i voice.mp3 -filter_complex "[1:a]apad=whole_dur=60[a]" -map 0:v -map "[a]" -shortest output.mp4
```
**配音比视频长**:使用 atempo 调速
```
ffmpeg -i voice.mp3 -filter:a "atempo=1.25" voice_fast.mp3
```
**多段配音拼接**:
```python
from moviepy import AudioFileClip, concatenate_audioclips
clips = [AudioFileClip(f"segment_{i}.mp3") for i in range(n)]
final_audio = concatenate_audioclips(clips)
```
### 三、完整工作流
#### 场景1:视频加字幕
1. 准备SRT字幕文件(UTF-8编码)
2. 检测系统可用中文字体
3. 使用ffmpeg烧录字幕
4. 验证输出文件大小和质量
#### 场景2:视频加配音
1. 准备配音文本
2. 使用edge-tts生成语音
3. 比对语音时长与视频时长
4. 必要时调速或填充静音
5. 合并视频与音频
#### 场景3:字幕+配音同步
1. 生成配音音频
2. 根据配音时长调整SRT时间轴
3. 烧录字幕
4. 混入配音音轨
5. 最终质量检查
## 故障排查
| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 字幕显示为方块 | 缺少中文字体 | 指定FontName为系统中文字体 |
| 输出文件过大 | 编码参数不当 | 使用CRF 23或限制比特率 |
| 字幕时间不同步 | SRT编码问题 | 确认SRT为UTF-8无BOM |
| 配音有杂音 | 采样率不匹配 | 统一为44100Hz或48000Hz |
| 中文字幕乱码 | 编码不匹配 | 使用`-sub_charenc UTF-8` |
## 批量处理
支持批量字幕烧录和配音生成:
- 使用 ffprobe 获取视频信息
- 循环处理多个文件
- 使用 `--timing` 统计耗时
- 并发处理(建议不超过4个)支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手