Giter Site home page Giter Site logo

xiaolv899 / pyvideotrans Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jianchang512/pyvideotrans

0.0 0.0 0.0 259.44 MB

Translate the video from one language to another and add dubbing. 将视频从一种语言翻译为另一种语言,并添加配音

Home Page: https://v.wonyes.org

License: MIT License

Python 100.00%

pyvideotrans's Introduction

EnglishVersion / 文档 / 👑有你帮助将更好 / 捐助者列表

视频翻译和配音工具

加入Discord讨论

这是一个视频翻译配音工具,可将一种语言的视频翻译为另一种语言配音和字幕的视频。

语音识别基于 openai-whisper 离线模型.

文字翻译支持 google|baidu|tencent|chatGPT|DeepL|DeepLX

文字合成语音支持 Microsoft Edge tts Openai TTS-1.

主要用途和使用方式

【翻译和配音】 A语言的视频处理后,转变为B语言配音的视频,并显示B语言字幕

点击选择待翻译的视频文件,然后依次选定源视频语言、目标语言、配音类型和角色、字幕嵌入类型,开始执行
【已有字幕配音并嵌入视频】 将本地已有的字幕文件进行配音,和已有的视频素材合并,组成有配音和字幕的视频(拖拽已有字幕到右侧编辑区)

选择本地打算添加字幕或配音的视频,然后将已有的字幕文件拖拽到右侧字幕区,选定源语言和目标语言、配音类型和角色,开始执行
【对已有字幕进行配音】 仅仅对已有的本地字幕配音,然后生成配音后的wav音频文件(不要选择视频,仅拖拽已有字幕到右侧编辑区,然后选择目标语言和配音角色)

将本地的字幕文件拖拽到右侧字幕编辑器,然后选择目标语言、配音类型和角色,开始执行
【从视频提取字幕】 选择视频,然后选择“不嵌入字幕”,配音角色为“No”

选择视频文件,选择视频源语言,其他无需选择,开始执行
【输出资源】 经过处理后,将在目标文件夹中创建视频同名子目录,输出“原语言srt字幕”、“目标语言srt字幕”、“配音后的wav音频文件”,以便于进一步进行其他处理

根据你的选择情况, 在目标文件夹下会生成 源语言字幕.srt、目标语言字幕.srt、源声音.wav、配音后.wav、未截断配音-nocut.wav,以便进行其他处理
【视频工具箱】 附带一个简单的视频工具箱,可进行音视频分离、音视频字幕合并、语音识别、语音合成、格式转化、摄像头麦克风录制

点击菜单栏-工具-视频工具箱,如图![](./images/p6.png)

1.mp4.mp4

使用预编译版本方法

  1. 只可用于 win10 win11 系统/Mac下需自行拉取源码编译

  2. 从 release 中下载最新版,解压,双击 sp.exe

  3. 原始视频:选择mp4/avi/mov/mkv/mpeg视频,可选择多个视频;

  4. 输出视频目录:如果不选择,则默认生成在同目录下的 _video_out,同时在该目录下的srt文件夹中将创建原语言和目标语言的两种字幕文件

  5. 选择翻译:可选 google、baidu、chatGPT、DeepL、DeepLX、tencent 翻译渠道

  6. 网络代理地址:如果你所在地区无法直接访问 google/chatGPT,需要在软件界面 网络代理 中设置代理,比如若使用 v2ray ,则填写 http://127.0.0.1:10809,若clash,则填写 http://127.0.0.1:7890. 如果你修改了默认端口或使用的其他代理软件,则按需填写

  7. 视频原始语言:选择待翻译视频里的语言种类

  8. 翻译目标语言:选择希望翻译到的语言种类

  9. 选择配音:选择翻译目标语言后,可从配音选项中,选择配音角色;

    硬字幕: 是指始终显示字幕,不可隐藏,如果希望网页中播放时也有字幕,请选择硬字幕嵌入

    软字幕: 如果播放器支持字幕管理,可显示或者隐藏字幕,该方式网页中播放时不会显示字幕,某些国产播放器可能不支持,需要将生成的视频同名srt文件和视频放在一个目录下才会显示

    如果“既不嵌入字幕又不选择配音角色”将只生成字幕文件

  10. 语音识别模型: 选择 base/small/medium/large/large-v3, 识别效果越来越好,但识别速度越来越慢,所需内存越来越大,第一次将需要下载模型,默认 base,可以预先单独下载模型后,放到 当前软件目录/models目录下.

    整体识别/预先分割: 整体识别是指直接发送整个语音文件给模型,由模型进行处理,分割可能更精确,但也可能造出30s长度的单字幕,适合有明确静音的音频; 预先分割时指先将音频按10s左右长度切割后再分别发送给模型处理。

    模型单独下载地址

    tiny模型

    base模型

    small模型

    medium模型

    large模型

    large-v3模型

    VLC解码器下载

    FFmepg下载(编译版已自带)

  11. 配音语速:填写 -90到+90 之间的数字,同样一句话在不同语言语音下,所需时间是不同的,因此配音后可能声画字幕不同步,可以调整此处语速,负数代表降速,正数代表加速播放。

  12. 音视频对齐: 分别是“配音自动加速”和“视频自动降速”

翻译后不同语言下发音时长不同,比如一句话中文3s,翻译为英文可能5s,导致时长和视频不一致。

2种解决方式:

1. 强制配音加速播放,以便缩短配音时长和视频对齐

2. 强制视频慢速播放,以便延长视频时长和配音对齐。

两者只可选其一

  1. 静音片段: 填写100到2000的数字,代表毫秒,默认 500,即以大于等于 500ms 的静音片段为区间分割语音

  2. CUDA加速:确认你的电脑显卡为 N卡,并且已配置好CUDA环境和驱动,则开启选择此项,速度能极大提升

  3. TTS: 可用 edgeTTS 和 openai TTS模型中选择要合成语音的角色,openai需要使用官方接口或者开通了tts-1模型的三方接口

  4. 点击 开始按钮 底部会显示当前进度和日志,右侧文本框内显示字幕

  5. 字幕解析完成后,将暂停等待修改字幕,如果不做任何操作,60s后将自动继续下一步。也可以在右侧字幕区编辑字幕,然后手动点击继续合成

  6. 将在目标文件夹中视频同名的子目录内,分别生成两种语言的字幕srt文件、原始语音和配音后的wav文件,以方便进一步处理

注意事项:

字幕显示问题

采用软合成字幕:字幕作为单独文件嵌入视频,可再次提取出,如果播放器支持,可在播放器字幕管理中启用或禁用字幕; 注意很多国内播放器必须将srt字幕文件和视频放在同一目录下且名字相同,才能加载软字幕,并且可能需要将srt文件转为GBK编码,否则显示乱码,

字幕语音对齐问题

翻译后不同语言下发音时长不同,比如一句话中文3s,翻译为英文可能5s,导致时长和视频不一致。 2种解决方式: 1. 强制配音加速播放,以便缩短配音时长和视频对齐 2. 强制视频慢速播放,以便延长视频时长和配音对齐。 两者只可选其一

源码部署

  1. 配置好 python 3.9+ 环境
  2. git clone https://github.com/jianchang512/pyvideotrans
  3. cd pyvideotrans
  4. CPU版pip install -r requirements.txt,GPU版 pip install -r requirements-gpt.txt
  5. 解压 ffmpeg.zip 到根目录下 (ffmpeg.exe文件)
  6. python sp.py 打开软件界面, python cli.py 命令行执行
  7. 如果希望打包为exe的话,请使用命令 pyinstaller sp.py,不要添加 -F 参数,否则可能闪退(tensorflow缘故)

CLI 命令行方式使用

点开查看具体使用方法

按照上述源码部署方式部署好后,执行 python cli.py,可在命令行下执行

支持的参数

--source_mp4: 【必填】待翻译视频路径,以.mp4结尾

--target_dir: 翻译后视频存放位置,默认存放源视频目录下的 _video_out 文件夹

--source_language:视频语言代码,默认en ( zh-cn | zh-tw | en | fr | de | ja | ko | ru | es | th | it | pt | vi | ar )

--target_language:目标语言代码,默认zh-cn ( zh-cn | zh-tw | en | fr | de | ja | ko | ru | es | th | it | pt | vi | ar )

zh-cn: Simplified_Chinese
zh-tw: Traditional_Chinese
en: English
fr: French
de: German
ja: Japanese
ko: Korean
ru: Russian
es: Spanish
th: Thai
it: Italian
pt: Portuguese
vi: Vietnamese
ar: Arabic

--proxy:填写 http 代理地址,默认 None,如果所在地区无法访问google,需要填写,例如: http://127.0.0.1:10809

--subtitle_type:1 嵌入硬字幕,2 嵌入软字幕。

硬字幕: 是指始终显示字幕,不可隐藏,如果希望网页中播放时也有字幕,请选择硬字幕嵌入

软字幕: 如果播放器支持字幕管理,可显示或者隐藏字幕,该方式网页中播放时不会显示字幕,某些国产播放器可能不支持

--voice_role:根据所选目标语言代码,填写对应的角色名,注意角色名的前2个字母需要和目标语言代码的前2个字母一致,如果不知道该怎么填写,执行python cli.py show_vioce 将显示每种语言对应可用的角色名称

zh: zh-HK-HiuGaaiNeural, zh-HK-HiuMaanNeural, zh-HK-WanLungNeural, zh-CN-XiaoxiaoNeural, zh-CN-XiaoyiNeural, zh-CN-YunjianNeural, zh-CN-YunxiNeural
, zh-CN-YunxiaNeural, zh-CN-YunyangNeural, zh-CN-liaoning-XiaobeiNeural, zh-TW-HsiaoChenNeural, zh-TW-YunJheNeural, zh-TW-HsiaoYuNeural, zh-CN-shaa
nxi-XiaoniNeural
en: en-AU-NatashaNeural, en-AU-WilliamNeural, en-CA-ClaraNeural, en-CA-LiamNeural, en-HK-SamNeural, en-HK-YanNeural, en-IN-NeerjaExpressiveNeural,
en-IN-NeerjaNeural, en-IN-PrabhatNeural, en-IE-ConnorNeural, en-IE-EmilyNeural, en-KE-AsiliaNeural, en-KE-ChilembaNeural, en-NZ-MitchellNeural, en-
NZ-MollyNeural, en-NG-AbeoNeural, en-NG-EzinneNeural, en-PH-JamesNeural, en-PH-RosaNeural, en-SG-LunaNeural, en-SG-WayneNeural, en-ZA-LeahNeural, e
n-ZA-LukeNeural, en-TZ-ElimuNeural, en-TZ-ImaniNeural, en-GB-LibbyNeural, en-GB-MaisieNeural, en-GB-RyanNeural, en-GB-SoniaNeural, en-GB-ThomasNeur
al, en-US-AriaNeural, en-US-AnaNeural, en-US-ChristopherNeural, en-US-EricNeural, en-US-GuyNeural, en-US-JennyNeural, en-US-MichelleNeural, en-US-R
ogerNeural, en-US-SteffanNeural
fr: fr-BE-CharlineNeural, fr-BE-GerardNeural, fr-CA-AntoineNeural, fr-CA-JeanNeural, fr-CA-SylvieNeural, fr-FR-DeniseNeural, fr-FR-EloiseNeural, fr
-FR-HenriNeural, fr-CH-ArianeNeural, fr-CH-FabriceNeural
de: de-AT-IngridNeural, de-AT-JonasNeural, de-DE-AmalaNeural, de-DE-ConradNeural, de-DE-KatjaNeural, de-DE-KillianNeural, de-CH-JanNeural, de-CH-Le
niNeural    
ja: ja-JP-KeitaNeural, ja-JP-NanamiNeural
ko: ko-KR-InJoonNeural, ko-KR-SunHiNeural    
ru: ru-RU-DmitryNeural, ru-RU-SvetlanaNeural
es: es-AR-ElenaNeural, es-AR-TomasNeural, es-BO-MarceloNeural, es-BO-SofiaNeural, es-CL-CatalinaNeural, es-CL-LorenzoNeural, es-CO-GonzaloNeural, e
s-CO-SalomeNeural, es-CR-JuanNeural, es-CR-MariaNeural, es-CU-BelkysNeural, es-CU-ManuelNeural, es-DO-EmilioNeural, es-DO-RamonaNeural, es-EC-Andre
aNeural, es-EC-LuisNeural, es-SV-LorenaNeural, es-SV-RodrigoNeural, es-GQ-JavierNeural, es-GQ-TeresaNeural, es-GT-AndresNeural, es-GT-MartaNeural,
es-HN-CarlosNeural, es-HN-KarlaNeural, es-MX-DaliaNeural, es-MX-JorgeNeural, es-NI-FedericoNeural, es-NI-YolandaNeural, es-PA-MargaritaNeural, es-P
A-RobertoNeural, es-PY-MarioNeural, es-PY-TaniaNeural, es-PE-AlexNeural, es-PE-CamilaNeural, es-PR-KarinaNeural, es-PR-VictorNeural, es-ES-AlvaroNe
ural, es-ES-ElviraNeural, es-US-AlonsoNeural, es-US-PalomaNeural, es-UY-MateoNeural, es-UY-ValentinaNeural, es-VE-PaolaNeural, es-VE-SebastianNeura
l
th: th-TH-NiwatNeural, th-TH-PremwadeeNeural
it: it-IT-DiegoNeural, it-IT-ElsaNeural, it-IT-IsabellaNeural
pt: pt-BR-AntonioNeural, pt-BR-FranciscaNeural, pt-PT-DuarteNeural, pt-PT-RaquelNeural
vi: vi-VN-HoaiMyNeural, vi-VN-NamMinhNeural
ar: ar-DZ-AminaNeural, ar-DZ-IsmaelNeural, ar-BH-AliNeural, ar-BH-LailaNeural, ar-EG-SalmaNeural, ar-EG-ShakirNeural, ar-IQ-BasselNeural, ar-IQ-Ran
aNeural, ar-JO-SanaNeural, ar-JO-TaimNeural, ar-KW-FahedNeural, ar-KW-NouraNeural, ar-LB-LaylaNeural, ar-LB-RamiNeural, ar-LY-ImanNeural, ar-LY-Oma
rNeural, ar-MA-JamalNeural, ar-MA-MounaNeural, ar-OM-AbdullahNeural, ar-OM-AyshaNeural, ar-QA-AmalNeural, ar-QA-MoazNeural, ar-SA-HamedNeural, ar-S
A-ZariyahNeural, ar-SY-AmanyNeural, ar-SY-LaithNeural, ar-TN-HediNeural, ar-TN-ReemNeural, ar-AE-FatimaNeural, ar-AE-HamdanNeural, ar-YE-MaryamNeural, ar-YE-SalehNeural

--voice_rate:负数降低配音语速,正数加快配音语速,默认0

--voice_silence: 输入100-2000之间的数字,表示静音段的最小毫秒,默认为 500。

--voice_autorate: 如果翻译后的音频时长超过原时长,是否强制加速播放翻译后的音频,以便对齐时长

--whisper_model: 默认为base,可选 base / small / medium / large,效果越来好,速度越来越慢。

cli示例

python cli.py --source_mp4 "D:/video/ex.mp4" --source_language en --target_language zh-cn --proxy "http://127.0.0.1:10809" --voice_replace zh-CN-XiaoxiaoNeural

上述意思是,将源语言为英文的 D:/video/ex.mp4 视频,翻译为中文视频,设置代理 http://127.0.0.1:10809 使用配音角色为 zh-CN-XiaoxiaoNeural

python cli.py --source_mp4 "D:/video/ex.mp4" --source_language zh-cn --target_language en --proxy "http://127.0.0.1"1080 9" --voice_replace en-US-AriaNeural --voice_autorate --whisper_model small

上述意思是,将源语言为中文的 D:/video/ex.mp4 视频,翻译为英文视频,设置代理 http://127.0.0.1:10809 使用配音角色为 en-US-AriaNeural,如果翻译后的语音时长大于原语音,则自动加速,文字识别模型采用 small 模型

软件预览截图

视频前后对比

Demo 原视频和翻译后视频

Youtube demo

CUDA 加速支持

  1. 如果你的显卡是 Nvidia,可以根据显卡驱动版本和操作系统版本,去安装对应的 CUDA Toolkit ,建议预先将显卡驱动升级到最新版,再去安装。要完整支持CUDA,需要使用源码版在自己电脑部署

  2. 去git拉取源码,然后配置好python虚拟环境,然后激活

  3. 安装 pip install -r requirements-gpu.txt 而不是 requirements.txt

  4. 到此应该可以使用了,如果有问题,那么执行 pip uninstall torch torchaudio torchvision 卸载,然后去 https://pytorch.org/get-started/locally/ 根据你的操作系统类型和 CUDA 版本,选择命令,如下图 然后将 pip3 改为 pip,再复制命令去执行。

  5. 的环境配置相对复杂,遇到问题多搜索或发个issue

致谢

本程序依赖这些开源项目

  1. pydub
  2. ffmpeg
  3. PyQt5
  4. SpeechRecognition
  5. edge-tts
  6. openai-whisper
  7. opencv-python

pyvideotrans's People

Contributors

jianchang512 avatar xuenew avatar alexsandropopovic avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.