https://github.com/winking324/subtitle-to-audio-track
Subtitle to Audio Track
https://github.com/winking324/subtitle-to-audio-track
audio subtitle track
Last synced: about 1 year ago
JSON representation
Subtitle to Audio Track
- Host: GitHub
- URL: https://github.com/winking324/subtitle-to-audio-track
- Owner: winking324
- License: mit
- Created: 2022-04-18T09:45:31.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-01-31T05:50:58.000Z (over 2 years ago)
- Last Synced: 2025-02-17T07:43:17.074Z (over 1 year ago)
- Topics: audio, subtitle, track
- Language: Python
- Homepage:
- Size: 25.4 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 字幕转音轨 Subtitle to Audio Track
给小朋友看纪录片时,大多数都是英文的,所以不得不充当人工翻译,但是人工翻译的效率很低,容易错过一些精彩的内容。
所以在刚好看到字幕的瞬间,想到了一个不错的想法:把字幕转成语音,替换进去不就好了吗?
# 流程
假设有一个视频为 `A.mkv`,大概的流程如下:
1. 提取 `A.mkv` 的音轨为 `A.mp3`;
2. 使用 [Spleeter](https://github.com/deezer/spleeter) 对 `A.mp3` 进行背景音和配音的分离;
3. 解析字幕,并调用百度语音合成 API,转换为音频段;
4. 把所有音频段和背景音合并起来成为 `B.mp3`;
5. 把 `B.mp3` 合并到 `A.mkv` 中,成为新的音轨;
# 用法
1. 保证视频和字幕在同一位置和名称,例如:
`/your/path/to/video.mkv`
`/your/path/to/video.ass`
2. 修改 `helper/speech.py` 中关于百度 API 接口的设置;
3. 执行 `python3 subtitle_to_audio_track.py /your/path/to/video.mkv`;
4. 最终视频文件输出到 `/your/path/to/video.ch.mkv`;
# TODO
1. 目前字幕文件只支持 `.ass` 格式;
2. ~~字幕文件的编码格式需要自动识别(目前为 UTF-16-LE);~~
3. 通过更好的方式设置百度 API,或者增加阿里等其他 API 的支持;
4. 优化音质的问题;
5. 优化音轨,例如增加音轨名称等;
6. Docker 打包,避免用户安装环境;
7. 复杂格式的 `ass` 字幕适配;
8. 自动增加标点符号,以获取更好的 TTS 效果;
9. 如果语音时长超过字幕时长,调整语速重新生成语音;
10. 使用微软 [TTS](https://azure.microsoft.com/en-us/services/cognitive-services/text-to-speech/) 替换百度;
# 遗留的问题
纪录片一般只有一个角色,所以用一种角色的配音,就可以获得比较好的效果。
另外,纪录片一般采用平铺直述的方式,语言中没有很多情感的波动,所以语音中没有太多情绪特征。
所以如果要给一般的视频转换配音,就需要更高的要求和挑战了,这是该项目目前所不具备的。
# 补充点子
现在媒体大多都转视频方式,不看完了也不知道能收获到什么,有点费时费力。而当下 ChatGPT 等 AI 助手已经很成熟,可以把文章汇总形成总结。可以考虑:
1. 提取音频;
2. 提取人声,并进行断句分割(可能需要根据声音特性区分成不同人);
3. 转文字;
4. 使用 AI 汇总成总结(或者分段总结);
5. 看总结决定要不要看视频(或者分段);