去字幕拼接视频技能
功能说明
本技能用于处理带有硬字幕的视频,主要完成两项工作:
1. 去字幕:去除视频底部的硬字幕(已烧录在画面中的字幕)
2. 拼接视频:将多个视频片段按顺序拼接成一个完整视频
处理方案
去字幕方法
由于硬字幕已烧录到画面中,无法直接删除,采用以下方法:
| 方法 | 说明 | 适用场景 |
|---|---|---|
| 裁剪+缩放(推荐) | 裁剪底部字幕区域,再缩放回原分辨率 | 字幕在底部、对画面比例要求不高 |
| 模糊处理 | 对字幕区域进行模糊覆盖 | 需要保留完整画面、可接受模糊区域 |
| 裁剪+黑边 | 裁剪底部后加黑边保持比例 | 可接受黑边 |
默认使用裁剪+缩放方法,确保字幕完全去除。
高清保持
- 重新编码时使用高码率(建议原视频码率的1.5-2倍)
- 使用
-q:v 1最高质量参数 - 音频直接复制,不重新编码
核心流程
1. 分析视频
- 检查视频分辨率、时长、编码格式
- 提取预览帧,确认字幕位置和大小
- 估算需要裁剪的区域
2. 去字幕处理
- 对每个视频进行裁剪+缩放处理
- 保持高码率和画质
- 输出到单独文件夹
3. 拼接视频
- 创建文件列表
- 使用 ffmpeg concat demuxer 拼接
- 输出最终完整视频
详细处理脚本见 scripts/process_and_concat.py
使用方法
方式一:完整流程(去字幕+拼接)
将所有需要处理的视频放在一个文件夹中,视频按顺序命名(如 1.mp4、2.mp4、3.mp4...),然后运行:
cd "技能scripts目录"
python process_and_concat.py -i "视频文件夹路径" -o "输出文件路径"
方式二:只去字幕
python process_and_concat.py -i "视频文件夹路径" -o "输出文件夹" --mode remove
方式三:只拼接
python process_and_concat.py -i "视频文件夹路径" -o "输出文件路径" --mode concat
参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
-i / --input |
输入视频文件夹 | 必填 |
-o / --output |
输出文件或文件夹 | 必填 |
--mode |
处理模式:all/remove/concat | all |
--crop-height |
裁剪底部高度(像素) | 自动检测 |
--bitrate |
输出视频码率 | 2500k |
--ffmpeg |
ffmpeg路径 | 自动检测 |
字幕位置估算
常见竖版视频(720x1280)的字幕位置:
| 视频类型 | 字幕大概位置 | 建议裁剪高度 |
|---|---|---|
| AI短剧 | 底部 1/3 区域 | 400-500 像素 |
| 普通影视剧 | 底部 1/8 区域 | 150-200 像素 |
| 短视频 | 底部 1/4 区域 | 250-350 像素 |
建议先提取预览帧确认字幕位置,再设置裁剪高度。
注意事项
- 硬字幕限制:硬字幕无法完美删除,裁剪会损失部分画面,模糊会有模糊区域
- 画质损失:重新编码会有轻微画质损失,使用高码率可最大程度保持画质
- 编码限制:精简版ffmpeg可能不支持libx264,默认使用mpeg4编码器
- 拼接要求:拼接的视频需要分辨率、帧率、编码格式一致
- 文件命名:视频按顺序命名(1.mp4、2.mp4...),拼接时按文件名排序
常见问题
Q: 裁剪后画面变形怎么办?
A: 可以改用模糊方法,或裁剪后加黑边保持原始比例。
Q: 拼接失败怎么办?
A: 检查所有视频的分辨率、帧率是否一致,不一致时先统一转码再拼接。
Q: 输出文件太大怎么办?
A: 降低码率参数,如 --bitrate 1500k。
Q: 字幕没完全去掉怎么办?
A: 增加裁剪高度,如 --crop-height 550,或先提取预览帧确认字幕位置。
版本历史
- v1.0(当前):支持裁剪去字幕、高清保持、多视频拼接