#4850 在翻译视频或音频功能中,

95.85* Posted at: 2 hours ago

在翻译视频或音频功能中,部署好了WhisperX跟OmniVoice,上传了一段双人英语对话的视频,也开启了识别说话人功能,但是生成的视频还是原声,

29 Replies

生成的视频仍是原声,核心原因是配音步骤未被触发。这与是否开启说话人分离无关,多数情况是因为没有为配音渠道选择有效的角色,或者目标语言设置导致软件认为无需配音。

解决方案:

  1. 确认目标语言选择:在主界面的“目标语言”下拉框中,必须选择一个明确的语言(例如“英语”或“中文”)。如果源语言和目标语言完全相同,翻译步骤会跳过,但配音仍可进行——前提是配音角色必须选定。
  2. 务必选择配音角色:在“配音渠道”选择 OmniVoice(本地API) 后,必须点击“配音角色”下拉菜单,选择一个具体的发音人(例如 en-US-JennyNeuralclone)。留空或选择“No”会导致配音阶段被跳过,最终输出保留原始音频。
  3. 检查 OmniVoice 服务状态:确保 OmniVoice 的 API 服务正在运行且端口正确(通常为 http://127.0.0.1:7860)。可在菜单 → TTS设置 → F5-TTS(OmniVoice 共用此面板)中验证API地址。
  4. 若需克隆原音色:选择角色为 clone,并将参考音频(.wav 格式,3-10秒)放入软件根目录下的 f5-tts/ 文件夹中,然后在设置中填写文件名(含后缀)。
  5. 查看日志:打开软件目录下的 logs/ 文件夹,找到最新的日志文件,搜索 should_dubbingdubbing 关键字,确认配音阶段是否被跳过,以及是否有 API 连接错误。

请查阅相关文档:


Application started at 2026-06-01 14:49:53

First searching GPU...
NVIDIA_GPU_NUMS=1
Found 1 GPUs, cost=6s
start workers...
process_max_gpu=2
multi_gpus=False
Concurrent task_nums=2
process_max=1
worker.name='PrepareVideo-1'
worker.name='PrepareVideo-2'
worker.name='SpeechToText-1'
worker.name='SpeechToText-2'
worker.name='DiarizSpeaker-1'
worker.name='DiarizSpeaker-2'
worker.name='AssembVideoAudioSrt-1'
worker.name='AssembVideoAudioSrt-2'
start 13 jobs
ended workers
[DEBUG] 返回缓存的编解码器 Windows-264: h264_nvenc
[DEBUG] 返回缓存的编解码器 Windows-265: hevc_nvenc
等待 uuid_signal 线程退出
正在等待线程 PrepareVideo-1 结束...
正在等待线程 PrepareVideo-2 结束...
正在等待线程 SpeechToText-1 结束...
正在等待线程 SpeechToText-2 结束...
正在等待线程 DiarizSpeaker-1 结束...
正在等待线程 DiarizSpeaker-2 结束...
正在等待线程 TranslationSRT 结束...
正在等待线程 DubbingSrt 结束...
正在等待线程 SpeechToText2 结束...
正在等待线程 AlignVieoAudioSrt 结束...
正在等待线程 AssembVideoAudioSrt-1 结束...
正在等待线程 AssembVideoAudioSrt-2 结束...
正在等待线程 TaskDone 结束...
Succes
......
f.wav', 'ref_wav': 'A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/clone-0.wav', 'sk
': 'en'}
[DEBUG] 开始语音合成:渠道2
[INFO] Starting call to 'videotrans.tts._omnivsk
._run', this is the 1st time calling it.
[INFO] Starting call to 'videotrans.tts._grsk
._send', this is the 1st time calling it.
[DEBUG] TTS-name=omnivoice
[DEBUG] 正在为线程 Dummy-69 初始化 Gradio Client: http://127.0.0.1:8081
Loaded as API: http://127.0.0.1:8081/
headers={'x-gradio-user': 'api'}
[DEBUG] result=('C:\Users\ASUS\AppData\Local\Temp\gradio\d466c55a40823b8f3153dce42469c7e5d603691f19e0e795f19b3cb881eba59b\audio.wav', 'Done.')

[DEBUG] [SpeedRate] Init. AudioRate=False, VideoRate=True, Rubberband=True
[DEBUG] [SpeedRate] 启用变速,进入对齐模式。
[DEBUG] [Calc] Mode=Only Video Line=1 | Source=11933 Dubb=770 -> TargetV=11933 TargetA=11933
[DEBUG] [Video] 提交 1 个视频处理任务
[DEBUG] [Video-Cut] 片段0 [原:0-11933ms] [目标:11933ms] [PTS:1.0000] 准备开始处理...
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -ss 00:00:00.000 -t 11.933000 -i A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/novoice.mp4 -an -c:v libx264 -g 1 -preset veryfast -crf 20 -pix_fmt yuv420p -vf setpts=PTS -fps_mode vfr -t 11.933000 clip_0_1.000.mp4

[DEBUG] [Video-Cut] 片段0 [原:0-11933ms] [目标:11933ms] [PTS:1.0000] 完成。实际生成时长: 11933ms
[DEBUG] [Video-Concat] 合并 1 个片段 -> A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/merged_video.mp4
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -f concat -safe 0 -i A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/video_concat.txt -c copy A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/merged_video.mp4

[DEBUG] 清理视频慢速中生成的视频片段,共删除了 1 个文件。
[DEBUG] [SpeedRate] 新视频生成完毕,总时长: 11933ms
[DEBUG] [Audio] 开始对齐拼接...
[DEBUG] [Audio-Sync] Line=1 | 音频末尾补静音 11163ms | [current_slot_audio_len=770 sk


=11933] | Timeline: 0 -> 11933
[DEBUG] concat_txt='A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/final_audio_concat.txt',filelist[0]='A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/dubb-0-14445be0f2e230999a8dde5100ff06df.wav'
[DEBUG] [Audio-Concat] 最终音频已生成: A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/target.wav

[DEBUG] 跳过二次识别
[DEBUG] 合并背景音 beishu=2,atime=11913,vtime=11933
[DEBUG] [最终视频合成]copy模式,无需重新编码:
['-y', '-progress', 'compose1780303632.2188609.txt', '-i', 'novoice.mp4', '-i', 'origin_audio.m4a', '-map', '0:v', '-map', '1:a', '-c:v', 'copy', '-c:a', 'copy', '-movflags', '+faststart', '-fps_mode', 'vfr', '-t', '11.933000', 'laste_target.mp4']
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -progress compose1780303632.2188609.txt -i novoice.mp4 -i origin_audio.m4a -map 0:v -map 1:a -c:v copy -c:a copy -movflags +faststart -fps_mode vfr -t 11.933000 laste_target.mp4

根据日志分析,配音已成功生成([DEBUG] 开始语音合成:渠道2 并返回了 .wav),但最终合成时直接使用了原始音频 origin_audio.m4a,导致视频仍为原声。

根本原因:你在主界面选择了“不嵌入字幕”选项。当该选项启用时,软件判断无需合成新的字幕轨道,因此在最后阶段会直接复制原始音频轨道,而不会使用配音生成的文件。

解决方案

  1. 将主界面“不嵌入字幕”改为“嵌入硬字幕”“嵌入软字幕”(即使你最终不需要字幕,也要选择软字幕并关闭播放器的字幕显示,或后期隐藏)。因为配音替换必须伴随字幕嵌入才能生效。
  2. 确保“配音渠道”已选择有效角色(如 clone 或具体发音人),OmniVoice 服务运行正常。
  3. 如果仍需保持不显示字幕,可在合成后使用其他工具移除软字幕轨道。

若问题仍然存在,请提供截取更多日志(特别是 [DEBUG] should_hebing[DEBUG] should_dubbing 相关行)以便进一步定位。


Application started at 2026-06-01 14:49:53

First searching GPU...
NVIDIA_GPU_NUMS=1
Found 1 GPUs, cost=6s
start workers...
process_max_gpu=2
multi_gpus=False
Concurrent task_nums=2
process_max=1
worker.name='PrepareVideo-1'
worker.name='PrepareVideo-2'
worker.name='SpeechToText-1'
worker.name='SpeechToText-2'
worker.name='DiarizSpeaker-1'
worker.name='DiarizSpeaker-2'
worker.name='AssembVideoAudioSrt-1'
worker.name='AssembVideoAudioSrt-2'
start 13 jobs
ended workers
[DEBUG] 返回缓存的编解码器 Windows-264: h264_nvenc
[DEBUG] 返回缓存的编解码器 Windows-265: hevc_nvenc
等待 uuid_signal 线程退出
正在等待线程 PrepareVideo-1 结束...
正在等待线程 PrepareVideo-2 结束...
正在等待线程 SpeechToText-1 结束...
正在等待线程 SpeechToText-2 结束...
正在等待线程 DiarizSpeaker-1 结束...
正在等待线程 DiarizSpeaker-2 结束...
正在等待线程 TranslationSRT 结束...
正在等待线程 DubbingSrt 结束...
正在等待线程 SpeechToText2 结束...
正在等待线程 AlignVieoAudioSrt 结束...
正在等待线程 AssembVideoAudioSrt-1 结束...
正在等待线程 AssembVideoAudioSrt-2 结束...
正在等待线程 TaskDone 结束...
Succes
......
r': 'api'}
[DEBUG] result=('C:\Users\ASUS\AppData\Local\Temp\gradio\01b65f8597386f804cdb5e006a372dea78103327254859d2877971e2036242c0\audio.wav', 'Done.')

[DEBUG] [SpeedRate] Init. AudioRate=False, VideoRate=True, Rubberband=True
[DEBUG] [SpeedRate] 启用变速,进入对齐模式。
[DEBUG] [Calc] Mode=Only Video Line=1 | Source=11933 Dubb=830 -> TargetV=11933 TargetA=11933
[DEBUG] [Video] 提交 1 个视频处理任务
[DEBUG] [Video-Cut] 片段0 [原:0-11933ms] [目标:11933ms] [PTS:1.0000] 准备开始处理...
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -ss 00:00:00.000 -t 11.933000 -i A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/novoice.mp4 -an -c:v libx264 -g 1 -preset veryfast -crf 20 -pix_fmt yuv420p -vf setpts=PTS -fps_mode vfr -t 11.933000 clip_0_1.000.mp4

[DEBUG] [Video-Cut] 片段0 [原:0-11933ms] [目标:11933ms] [PTS:1.0000] 完成。实际生成时长: 11933ms
[DEBUG] [Video-Concat] 合并 1 个片段 -> A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/merged_video.mp4
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -f concat -safe 0 -i A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/video_concat.txt -c copy A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/merged_video.mp4

[DEBUG] 清理视频慢速中生成的视频片段,共删除了 1 个文件。
[DEBUG] [SpeedRate] 新视频生成完毕,总时长: 11933ms
[DEBUG] [Audio] 开始对齐拼接...
[DEBUG] [Audio-Sync] Line=1 | 音频末尾补静音 11103ms | [current_slot_audio_len=830 sk


=11933] | Timeline: 0 -> 11933
[DEBUG] concat_txt='A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/final_audio_concat.txt',filelist[0]='A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/dubb-0-14445be0f2e230999a8dde5100ff06df.wav'
[DEBUG] [Audio-Concat] 最终音频已生成: A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/target.wav

[DEBUG] 进入二次识别

[DEBUG] 开始语音识别:渠道14

[DEBUG] 二次识别成功完成

[DEBUG] 合并背景音 beishu=2,atime=11913,vtime=11933
[DEBUG]


==准备要嵌入的字幕:self.sk
_type=2
=
[DEBUG] 最终确定字幕嵌入类型:2 ,目标字幕语言:zho, 字幕文件:A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/end.srt

[DEBUG] [最终视频合成]copy模式,无需重新编码:
['-y', '-progress', 'compose1780303967.5761044.txt', '-i', 'novoice.mp4', '-i', 'origin_audio.m4a', '-i', 'end.srt', '-map', '0:v', '-map', '1:a', '-map', '2:s', '-c:v', 'copy', '-c:a', 'copy', '-c:s', 'mov_text', '-metadata:s:s:0', 'language=zho', '-movflags', '+faststart', '-fps_mode', 'vfr', '-t', '11.933000', 'laste_target.mp4']
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -progress compose1780303967.5761044.txt -i novoice.mp4 -i origin_audio.m4a -i end.srt -map 0:v -map 1:a -map 2:s -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=zho -movflags +faststart -fps_mode vfr -t 11.933000 laste_target.mp4

还是不行

从新日志看,配音音频(target.wav)已成功生成,但最终合成命令仍使用了原始音频 origin_audio.m4a,且未引用 target.wav。这表明软件在最后一步没有将配音音频替换到视频中。根据日志 beishu=2,你很可能在“设置更多参数”中开启了分离人声/背景声重新嵌入背景声功能,导致软件执行了背景音混音逻辑,但未正确将配音音频作为主音轨。
解决方案

  1. 点击主界面 设置更多参数取消勾选以下所有选项:

    • 分离人声背景声
    • 重新嵌入背景声
    • 循环背景音
    • 额外添加背景音频
  2. 确保“目标语言”与“发音语言”不同(若相同则不会触发翻译和配音)。
  3. 将主界面字幕选项改为 嵌入硬字幕嵌入软字幕(不要选“不嵌入字幕”)。
  4. 重新执行一次,并观察日志中最终合成命令是否使用 -i target.wav 而不是 -i origin_audio.m4a
    如果问题依旧,请检查软件是否为最新版 v4.00(若不是请升级),并清理缓存后重试。


Application started at 2026-06-01 14:49:53

First searching GPU...
NVIDIA_GPU_NUMS=1
Found 1 GPUs, cost=6s
start workers...
process_max_gpu=2
multi_gpus=False
Concurrent task_nums=2
process_max=1
worker.name='PrepareVideo-1'
worker.name='PrepareVideo-2'
worker.name='SpeechToText-1'
worker.name='SpeechToText-2'
worker.name='DiarizSpeaker-1'
worker.name='DiarizSpeaker-2'
worker.name='AssembVideoAudioSrt-1'
worker.name='AssembVideoAudioSrt-2'
start 13 jobs
ended workers
[DEBUG] 返回缓存的编解码器 Windows-264: h264_nvenc
[DEBUG] 返回缓存的编解码器 Windows-265: hevc_nvenc
等待 uuid_signal 线程退出
正在等待线程 PrepareVideo-1 结束...
正在等待线程 PrepareVideo-2 结束...
正在等待线程 SpeechToText-1 结束...
正在等待线程 SpeechToText-2 结束...
正在等待线程 DiarizSpeaker-1 结束...
正在等待线程 DiarizSpeaker-2 结束...
正在等待线程 TranslationSRT 结束...
正在等待线程 DubbingSrt 结束...
正在等待线程 SpeechToText2 结束...
正在等待线程 AlignVieoAudioSrt 结束...
正在等待线程 AssembVideoAudioSrt-1 结束...
正在等待线程 AssembVideoAudioSrt-2 结束...
正在等待线程 TaskDone 结束...
Succes
......
598335266113s
[DEBUG] [SpeedRate] Init. AudioRate=False, VideoRate=True, Rubberband=True
[DEBUG] [SpeedRate] 启用变速,进入对齐模式。
[DEBUG] [Calc] Mode=Only Video Line=1 | Source=11933 Dubb=780 -> TargetV=11933 TargetA=11933
[DEBUG] [Video] 提交 1 个视频处理任务
[DEBUG] [Video-Cut] 片段0 [原:0-11933ms] [目标:11933ms] [PTS:1.0000] 准备开始处理...
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -ss 00:00:00.000 -t 11.933000 -i A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/novoice.mp4 -an -c:v libx264 -g 1 -preset veryfast -crf 20 -pix_fmt yuv420p -vf setpts=PTS -fps_mode vfr -t 11.933000 clip_0_1.000.mp4

[DEBUG] [Video-Cut] 片段0 [原:0-11933ms] [目标:11933ms] [PTS:1.0000] 完成。实际生成时长: 11933ms
[DEBUG] [Video-Concat] 合并 1 个片段 -> A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/merged_video.mp4
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -f concat -safe 0 -i A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/video_concat.txt -c copy A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/merged_video.mp4

[DEBUG] 清理视频慢速中生成的视频片段,共删除了 1 个文件。
[DEBUG] [SpeedRate] 新视频生成完毕,总时长: 11933ms
[DEBUG] [Audio] 开始对齐拼接...
[DEBUG] [Audio-Sync] Line=1 | 音频末尾补静音 11153ms | [current_slot_audio_len=780 sk


=11933] | Timeline: 0 -> 11933
[DEBUG] concat_txt='A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/final_audio_concat.txt',filelist[0]='A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/dubb-0-14445be0f2e230999a8dde5100ff06df.wav'
[DEBUG] [Audio-Concat] 最终音频已生成: A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/target.wav

[DEBUG] 进入二次识别

[DEBUG] 开始语音识别:渠道14

[DEBUG] 二次识别成功完成

[DEBUG]


==准备要嵌入的字幕:self.sk
_type=2
=
[DEBUG] 最终确定字幕嵌入类型:2 ,目标字幕语言:zho, 字幕文件:A:/BaiduNetdiskDownload/py/tmp/9356/886f2dc68f/end.srt

[DEBUG] [最终视频合成]copy模式,无需重新编码:
['-y', '-progress', 'compose1780304732.7691329.txt', '-i', 'novoice.mp4', '-i', 'origin_audio.m4a', '-i', 'end.srt', '-map', '0:v', '-map', '1:a', '-map', '2:s', '-c:v', 'copy', '-c:a', 'copy', '-c:s', 'mov_text', '-metadata:s:s:0', 'language=zho', '-movflags', '+faststart', '-fps_mode', 'vfr', '-t', '11.933000', 'laste_target.mp4']
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -progress compose1780304732.7691329.txt -i novoice.mp4 -i origin_audio.m4a -i end.srt -map 0:v -map 1:a -map 2:s -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=zho -movflags +faststart -fps_mode vfr -t 11.933000 laste_target.mp4

还是相同的结果,我确定版本为4.00最新版,确定WhisperX跟OmniVoice能够正常使用,生成的视频虽然有en.m4a、en.srt、TikDownloader.sk


_hd.mp4、 zh-cn.m4a、zh-cn.srt这几个文件夹,但是zh-cn.srt这个字幕文件里是乱码:1
00:00:00,000 --> 00:00:02,000
1

-
-

f
o
r

y
o
u

t
o
d
a
y

问题依然存在——最终合成命令仍使用原始音频 origin_audio.m4a 而不是配音音频 target.wav,同时字幕文件内容乱码(如 100:00:00,000 --> 00:00:02,0001--foryoutoday)。这表明软件没有正确识别配音结果,且字幕生成环节出现异常。

核心原因可能是缓存干扰:你之前尝试过不同设置(如分离背景声、不嵌入字幕等),尽管已更改选项,但软件仍读取了历史缓存的决策,导致最终合成时跳过替换。日志中 should_hebing 标志位可能为 False,但此处未打印。

分步解决方案:

  1. 强制清理所有缓存

    • 在主界面左上角勾选“清理已生成”
    • 同时手动删除视频输出目录(_video_out)下的整个缓存子文件夹(如 TikDownloader.sk_hd-mp4),以及软件根目录下的 tmp 文件夹内的所有内容。
    • 重新启动软件。
  2. 检查发音语言与目标语言设置

    • 确保“发音语言”正确选择了 英语(而不是 auto),目标语言选择 简体中文
    • 不要选择相同语言,否则翻译和配音可能被跳过。
  3. 检查字幕乱码问题

    • 乱码内容 100:00:00,000 --> 00:00:02,0001--foryoutoday 表明字幕格式被破坏。
    • 可能是 WhisperX 识别结果或翻译渠道返回了非标准内容。建议:

      • 在语音识别阶段完成后,留意弹出编辑窗口(单视频模式),检查原始字幕是否正常。
      • 若未弹出,说明批量模式下无编辑机会,可先尝试使用 “批量语音转字幕” 单独测试 WhisperX 识别效果。
      • 若识别结果正常,则问题出在翻译渠道(如 Google 翻译可能因代理问题返回乱码)。请尝试更换翻译渠道为 DeepSeek微软翻译
  4. 确保配音渠道连接正确

    • 日志中 Loaded as API: http://127.0.0.1:8081/,OmniVoice 服务地址正确。
    • 但配音生成了 .wav 却未被使用,请确认在 菜单 → TTS设置 → F5-TTS(OmniVoice共用) 中:

      • API地址 填写的是 http://127.0.0.1:8081(而不是 7860)。
      • 参考音频 文件(如 clone 模式)已放置在 f5-tts/ 目录下并正确填写文件名。
    • 若使用 clone 角色,确保视频中说话人语音片段时长在 3-10 秒之间(可在高级选项中设置最短语音持续毫秒为 3000)。
  5. 关闭视频慢速功能

    • 日志中 VideoRate=True(视频慢速已开启)。该功能有时会引入音频替换逻辑错误。
    • 尝试取消勾选“视频慢速”,仅勾选“音频加速”或不勾选任何加速选项(让软件自动处理)。
  6. 最后手段:重启并执行一次简单测试

    • 重启软件后,仅选择一个很短(10秒内)的英文测试视频。
    • 设置如下:

      • 发音语言:英语
      • 目标语言:简体中文
      • 语音识别:WhisperX
      • 翻译渠道:微软翻译(免费,无需代理)
      • 配音渠道:OmniVoice,选择具体角色(非clone)
      • 字幕:嵌入硬字幕
      • 不勾选视频慢速、音频加速、分离背景声、降噪等任何额外选项
      • 勾选“清理已生成”
    • 点击开始执行,观察最终视频声音是否被替换以及字幕是否正常。

如果仍失败,请提供完整的日志文件(从本次全新任务开始到结束的完整内容),以便进一步分析 should_hebing 标志位和合成决策逻辑。

使用内置的 faster-whisper 渠道和识别,先不要使用 whisperx,判断哪里出了问题

另外在输出文件及内播放 zh-cn.m4a,听听是否正常

选择左上角 清理已生成,照此重试

origin_audio.m4a 只是最终等待嵌入的音频名称,可能是原声也可能是配音文件

我自己上传了字幕文件后,这个问题解决了,视频也成功给不同的说话人配音了,但是现在又有个问题是,原语言是英语,目标语言设置中文后,生成的视频会出现,中文说完之后,有夹杂着英语,这是什么原因?

问题核心原因是:部分字幕行翻译失败或配音失败,导致软件保留了原始英语音频片段进行合成。你上传自己的字幕文件后,翻译/配音过程能正常运行,说明自动生成的字幕在断句或内容上存在缺陷,导致某些行被跳过。

解决方案:

  1. 检查日志中的报错:打开 logs/ 文件夹的最新日志文件,搜索 transdub 相关关键字,查找如下提示:

    • 翻译出错 / translate error
    • 配音失败 / dubbing error
    • skip / retry
      这些行会明确指出是哪几行字幕出了问题。
  2. 优化字幕断句与翻译稳定性

    • 在主界面 不勾选 “二次识别”(已启用)和“视频慢速”(已启用)可能导致对齐逻辑复杂,建议先取消“视频慢速”。
    • 在“设置更多参数”中,将 传统/AI翻译渠道每批字幕行数 设为 5翻译后暂停秒 设为 2,降低并发防止限流。
    • 如果使用 AI 翻译渠道(如 DeepSeek/OpenAI),确保模型名称填写正确,并检查 API 额度是否充足。
  3. 强制避免缓存干扰:每次修改设置前,务必勾选主界面左上角 “清理已生成”,并手动删除 _video_out 目录下对应视频的缓存文件夹。
  4. 测试目标语言配音:单独对翻译后的 zh-cn.srt 使用“批量为字幕配音”功能,选择 OmniVoice 具体角色(非 clone),观察是否所有行都能成功合成。如果部分行失败,则说明 TTS 接口对该句文本不支持(如含特殊字符或超长)。
  5. 回退到内置 faster-whisper:如开发者建议,暂时不使用 WhisperX,用 faster-whisper + large-v3 模型 + 明确选择“英语”作为发音语言,观察能否稳定输出中文配音。

如果问题依旧,请提供本次任务开始到结束的完整日志(从开始执行到结束),我帮你定位失败行和原因。

生成后的zh-cn.srt文件,我检查了是正确的,但是视频会有中文后夹着英语的情况,并且中间部分也没有配音。

问题在于有部分字幕行配音失败,软件回退保留了原英语音频。尽管 zh-cn.srt 正确,但若某行未被合成,该片段会用原声填充,导致中文夹杂英语。

排查与解决

  1. 查看日志中的详细配音错误:打开 logs/ 下最新日志,搜索 dub/error/fail/skip,找到具体哪几行字幕配音失败(例如 Line 3 dub fail),并查看错误原因(超时、TTS 不支持字符、参考音频问题等)。
  2. 针对失败行处理

    • 若使用 clone 角色,失败常因参考音频时长不在 3-10 秒 → 在“设置更多参数”中将“最短语音持续毫秒”设为 3000,“最长语音持续秒数”设为 10,并勾选“Whisper预分割音频”和“合并过短字幕到邻近”。
    • 若使用 OmniVoice 具体角色,失败可能因该行文本含特殊符号或超长 → 检查字幕行字符数是否超过限制,或临时改用 Edge-TTS 测试全部行是否都能合成。
  3. 强制串行处理:批量时不勾选“音频加速”或“视频慢速”,在“高级选项”中打开“批量翻译时强制串行”,降低资源竞争。
  4. 清理缓存:勾选“清理已生成”并删除 _video_out 下对应视频的缓存文件夹,重新执行。

如果仍无法解决,请提供日志中 dub 相关的 20 行内容,可准确定位失败原因。


Application started at 2026-01-26 22:41:35

[DEBUG] 平台: Windows。正在按优先级检测最佳的 'h264' 编码器: ['nvenc', 'qsv', 'amf']
First searching GPU...
[DEBUG] 正在测试编码器是否可用: h264_nvenc...
Found 1 GPUs, cost=2s
start workers...
NVIDIA_GPU_NUMS=1
process_max_gpu=0
multi_gpus=False
Concurrent task_nums=1
process_max=0
start 8 jobs
ended workers
[DEBUG] 硬件编码器 'h264_nvenc' 可用。
[DEBUG] 已选择硬件编码器: h264_nvenc
[DEBUG] 最终确定使用的编码器: h264_nvenc
[DEBUG] 平台: Windows。正在按优先级检测最佳的 'hevc' 编码器: ['nvenc', 'qsv', 'amf']
[DEBUG] 正在测试编码器是否可用: hevc_nvenc...
[DEBUG] 硬件编码器 'hevc_nvenc' 可用。
[DEBUG] 已选择硬件编码器: hevc_nvenc
[DEBUG] 最终确定使用的编码器: hevc_nvenc
config.stoped_uuid_set=set()
{'queue_tts': [{'text': 'Hello, my dear friend. I hope your every day is beautiful and enjoyable!', 'rate': '+0%', 'role': 'F1', 'filename': 'C:\Users\ASUS\AppData\Local\Temp/pyvideotrans/1769438516.351577.wav', 'tts_type': 12, 'language': 'en', 'volume': '+0%', 'pitch': '+0Hz'}], 'language': 'en', 'uuid': None, 'play':
......
sk_nums=1
process_max=2
start 8 jobs
ended workers
config.stoped_uuid_set=set()
{'queue_tts': [{'text': 'Hello, my dear friend. I hope your every day is beautiful and enjoyable!', 'rate': '+0%', 'role': 'en_US-danny-low', 'filename': 'C:\Users\ASUS\AppData\Local\Temp/pyvideotrans/1769440454.917819.wav', 'tts_type': 1, 'language': 'en', 'volume': '+0%', 'pitch': '+0Hz'}], 'language': 'en', 'uuid': None, 'play': True, 'is_test': True, 'tts_type': 1}


Application started at 2026-01-26 23:15:08

[DEBUG] 返回缓存的编解码器 Windows-264: h264_nvenc
[DEBUG] 返回缓存的编解码器 Windows-265: hevc_nvenc
First searching GPU...
Found 1 GPUs, cost=2s
start workers...
NVIDIA_GPU_NUMS=1
process_max_gpu=0
multi_gpus=False
Concurrent task_nums=1
process_max=2
start 8 jobs
ended workers
config.stoped_uuid_set=set()
{'queue_tts': [{'text': 'Hello, my dear friend. I hope your every day is beautiful and enjoyable!', 'rate': '+0%', 'role': 'F1', 'filename': 'C:\Users\ASUS\AppData\Local\Temp/pyvideotrans/1769440710.8575838.wav', 'tts_type': 12, 'language': 'en', 'volume': '+0%', 'pitch': '+0Hz'}], 'language': 'en', 'uuid': None, 'play': True, 'is_test': True, 'tts_type': 12}
Returning existing local_dir A:\BaiduNetdiskDownload\py\models\models--Supertone--supertonic-2 as remote repo cannot be accessed in snapsk-*** (None).
Using CPU for inference
[DEBUG] [字幕配音]渠道12:共耗时:1s
config.stoped_uuid_set=set()
{'queue_tts': [{'text': '你好啊我的朋友', 'role': 'boy1', 'filename': 'A:/BaiduNetdiskDownload/py/tmp/16128/1769440746.0529704-chattts.wav', 'tts_type': 21}], 'language': 'zh', 'uuid': None, 'play': True, 'is_test': True, 'tts_type': 21}
[INFO] Starting call to 'videotrans.tts._chattts.ChatTTS._item_task.._run', this is the 1st time calling it.
[DEBUG] [字幕配音]渠道21:共耗时:3s
config.stoped_uuid_set=set()
{'queue_tts': [{'text': '你好啊我的朋友', 'role': 'boy1', 'filename': 'A:/BaiduNetdiskDownload/py/tmp/16128/1769440760.253144-chattts.wav', 'tts_type': 21}], 'language': 'zh', 'uuid': None, 'play': True, 'is_test': True, 'tts_type': 21}
[INFO] Starting call to 'videotrans.tts._chattts.ChatTTS._item_task.._run', this is the 1st time calling it.
[DEBUG] [字幕配音]渠道21:共耗时:3s
config.stoped_uuid_set=set()
{'queue_tts': [{'text': 'Hello, my dear friend. I hope your every day is beautiful and enjoyable!', 'rate': '+0%', 'role': 'gtts', 'filename': 'C:\Users\ASUS\AppData\Local\Temp/pyvideotrans/1769440809.1450815.wav', 'tts_type': 27, 'language': 'en', 'volume': '+0%', 'pitch': '+0Hz'}], 'language': 'en', 'uuid': None, 'play': True, 'is_test': True, 'tts_type': 27}
[INFO] Starting call to 'videotrans.tts._gtts.GTTS._item_task.._run', this is the 1st time calling it.
等待 uuid_signal 线程退出
正在等待线程 PrepareVideo 结束...
正在等待线程 SpeechToText 结束...
正在等待线程 DiarizSpeaker 结束...
正在等待线程 TranslationSRT 结束...
正在等待线程 DubbingSrt 结束...
正在等待线程 AlignVieoAudioSrt 结束...
正在等待线程 AssembVideoAudioSrt 结束...
正在等待线程 TaskDone 结束...
Successfully killed ffmpeg processes using taskkill

你提供的日志片段不完整,仅包含了试听配音和程序启动/退出的信息,没有实际视频翻译任务的运行日志(缺少关键阶段如配音生成、最终合成时的决策)。因此无法从该日志中定位中文夹杂英语的具体原因。

请按照以下步骤操作,并重新提供核心日志:

  1. 强制清理缓存:勾选左上角“清理已生成”,手动删除 _video_out 下对应视频的缓存文件夹。
  2. 回退到内置 faster-whisper:如开发者建议,暂时停用 WhisperX,语音识别选择 faster-whisper(本地) + large-v3 模型,发音语言明确选“英语”,目标语言选“简体中文”。
  3. 录制完整日志:点击“开始执行”后,不要中途关闭软件。等待任务完成或失败后,打开 logs/ 文件夹下当天的 .log 文件,复制从任务开始到结束的完整内容(约50-100行即可),粘贴在回复中。

同时,请确认你在主界面上:

  • 字幕选项为嵌入硬字幕嵌入软字幕(不要选“不嵌入字幕”)。
  • 配音渠道选择了你正常使用的渠道(如 OmniVoice),并指定了具体角色(不要使用 clone 进行本次测试)。
  • 取消勾选“视频慢速”和“音频加速”。

提供完整日志后,我可以准确诊断是哪几行字幕配音失败导致保留原声。


Application started at 2026-06-01 14:49:53

First searching GPU...
NVIDIA_GPU_NUMS=1
Found 1 GPUs, cost=6s
start workers...
process_max_gpu=2
multi_gpus=False
Concurrent task_nums=2
process_max=1
worker.name='PrepareVideo-1'
worker.name='PrepareVideo-2'
worker.name='SpeechToText-1'
worker.name='SpeechToText-2'
worker.name='DiarizSpeaker-1'
worker.name='DiarizSpeaker-2'
worker.name='AssembVideoAudioSrt-1'
worker.name='AssembVideoAudioSrt-2'
start 13 jobs
ended workers
[DEBUG] 返回缓存的编解码器 Windows-264: h264_nvenc
[DEBUG] 返回缓存的编解码器 Windows-265: hevc_nvenc
等待 uuid_signal 线程退出
正在等待线程 PrepareVideo-1 结束...
正在等待线程 PrepareVideo-2 结束...
正在等待线程 SpeechToText-1 结束...
正在等待线程 SpeechToText-2 结束...
正在等待线程 DiarizSpeaker-1 结束...
正在等待线程 DiarizSpeaker-2 结束...
正在等待线程 TranslationSRT 结束...
正在等待线程 DubbingSrt 结束...
正在等待线程 SpeechToText2 结束...
正在等待线程 AlignVieoAudioSrt 结束...
正在等待线程 AssembVideoAudioSrt-1 结束...
正在等待线程 AssembVideoAudioSrt-2 结束...
正在等待线程 TaskDone 结束...
Succes
......
\Local\Temp\gradio\f56bec3d636b901ab9decd6ea2f6d8261794324b6e16ee47c0b68724c59ea1aa\audio.wav', 'Done.')
[INFO] Starting call to 'videotrans.tts._omnivsk
._run', this is the 1st time calling it.
[INFO] Starting call to 'videotrans.tts._grsk
._send', this is the 1st time calling it.
[DEBUG] TTS-name=omnivoice
headers={'x-gradio-user': 'api'}
[DEBUG] result=('C:\Users\ASUS\AppData\Local\Temp\gradio\2df2ea328a16d3bb7f451a6b2e72590a40264c97c17e56541ca476577c476663\audio.wav', 'Done.')
[INFO] Starting call to 'videotrans.tts._omnivsk
._run', this is the 1st time calling it.
[INFO] Starting call to 'videotrans.tts._grsk
._send', this is the 1st time calling it.
[DEBUG] TTS-name=omnivoice
headers={'x-gradio-user': 'api'}
[DEBUG] result=('C:\Users\ASUS\AppData\Local\Temp\gradio\426a1eae61c6144d9328ef558de386e726d6759d5fe8777049f028d1050b93b6\audio.wav', 'Done.')
[INFO] Starting call to 'videotrans.tts._omnivsk
._run', this is the 1st time calling it.
[INFO] Starting call to 'videotrans.tts._grsk
._send', this is the 1st time calling it.
[DEBUG] TTS-name=omnivoice
headers={'x-gradio-user': 'api'}
[DEBUG] result=('C:\Users\ASUS\AppData\Local\Temp\gradio\9c5e8602fb64116c7a454aad460b78e8590cba1faa521ffbb68dcaf8952f2f67\audio.wav', 'Done.')

[DEBUG] [SpeedRate] Init. AudioRate=False, VideoRate=False, Rubberband=True
[DEBUG] [SpeedRate] 未启用变速,进入普通拼接模式。
[DEBUG] concat_txt='A:/BaiduNetdiskDownload/py/tmp/19660/a334810f85/final_audio_concat.txt',filelist[0]='A:/BaiduNetdiskDownload/py/tmp/19660/a334810f85/dubb-0-1e73fdb8f05c49101d5c97096c07bb16.wav'
[DEBUG] [Audio-Concat] 最终音频已生成: A:/BaiduNetdiskDownload/py/tmp/19660/a334810f85/target.wav

[DEBUG] 跳过二次识别
[DEBUG]


==准备要嵌入的字幕:self.sk
_type=2
=
[DEBUG] 最终确定字幕嵌入类型:2 ,目标字幕语言:zho, 字幕文件:A:/BaiduNetdiskDownload/py/tmp/19660/a334810f85/end.srt

[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -i novoice.mp4 -vf tpad=stop_mode=clone:sk


=2.007 -c:v libx264 -crf 18 -preset medium -an final_video_with_freeze_lastend.mp4

[DEBUG] 视频定格应延长2007ms,实际向上取整秒延长2.007s,操作成功。
[DEBUG] [最终视频合成]copy模式,无需重新编码:
['-y', '-progress', 'compose1780306262.94003.txt', '-i', 'novoice.mp4', '-i', 'origin_audio.m4a', '-i', 'end.srt', '-map', '0:v', '-map', '1:a', '-map', '2:s', '-c:v', 'copy', '-c:a', 'copy', '-c:s', 'mov_text', '-metadata:s:s:0', 'language=zho', '-movflags', '+faststart', '-t', '13.933000', 'laste_target.mp4']
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -progress compose1780306262.94003.txt -i novoice.mp4 -i origin_audio.m4a -i end.srt -map 0:v -map 1:a -map 2:s -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=zho -movflags +faststart -t 13.933000 laste_target.mp4

问题定位:你的日志显示,目标音频 target.wav 已成功生成,但最终合成命令仍使用了原始音频 origin_audio.m4a,未替换为配音。同时日志中 AudioRate=False, VideoRate=False(未启用任何加速/慢放),软件进入了“普通拼接模式”并执行了“视频定格处理”,这步操作可能中断了正常的音频替换流程。

根本原因:在“设置更多参数”中,你同时取消了“音频加速”和“视频慢速”,并可能启用了“移除字幕间静音”或“对齐字幕和声音”等选项,导致软件没有执行配音替换逻辑。

解决方案

  1. 勾选主界面的 “音频加速”(即使配音时长短于原时长也无妨,软件会自动适配)。
  2. 同时确保 不勾选 “视频慢速”、“移除字幕间静音” 等干扰项。
  3. 勾选左上角 “清理已生成”,并手动删除 _video_out 下对应视频的缓存文件夹。
  4. 重新执行任务。

若问题依然存在,请提供本次完整日志(从 start workers 到 ended workers 的全部内容,尤其关注 should_dubbingshould_hebing 标志位出现的位置),以便确认是否是软件 bug。


Application started at 2026-06-01 14:49:53

First searching GPU...
NVIDIA_GPU_NUMS=1
Found 1 GPUs, cost=6s
start workers...
process_max_gpu=2
multi_gpus=False
Concurrent task_nums=2
process_max=1
worker.name='PrepareVideo-1'
worker.name='PrepareVideo-2'
worker.name='SpeechToText-1'
worker.name='SpeechToText-2'
worker.name='DiarizSpeaker-1'
worker.name='DiarizSpeaker-2'
worker.name='AssembVideoAudioSrt-1'
worker.name='AssembVideoAudioSrt-2'
start 13 jobs
ended workers
[DEBUG] 杩斿洖缂撳瓨鐨勭紪瑙g爜鍣?Windows-264: h264_nvenc
[DEBUG] 杩斿洖缂撳瓨鐨勭紪瑙g爜鍣?Windows-265: hevc_nvenc
绛夊緟 uuid_signal 绾跨▼閫€鍑?
姝e湪绛夊緟绾跨▼ PrepareVideo-1 缁撴潫...
姝e湪绛夊緟绾跨▼ PrepareVideo-2 缁撴潫...
姝e湪绛夊緟绾跨▼ SpeechToText-1 缁撴潫...
姝e湪绛夊緟绾跨▼ SpeechToText-2 缁撴潫...
姝e湪绛夊緟绾跨▼ DiarizSpeaker-1 缁撴潫...
姝e湪绛夊緟绾跨▼ DiarizSpeaker-2 缁撴潫...
姝e湪绛夊緟绾跨▼ TranslationSRT 缁撴潫...
姝e湪绛夊緟绾跨▼ DubbingSrt 缁撴潫...
姝e湪绛夊緟绾跨▼ SpeechToText2 缁撴潫...
姝e湪绛夊緟绾跨▼ AlignVieoAudioSrt 缁撴潫...
姝e湪绛夊緟绾跨▼ AssembVideoAudioSrt-1 缁撴潫...
姝e湪绛夊緟绾跨▼
......
meline: 1000 -> 2000
[DEBUG] [Audio-Sync] Line=3 | 闊抽鏈熬琛ラ潤闊?870ms | [current_slot_audio_len=2130 sk
=3000] | Timeline: 2000 -> 5000
[DEBUG] [Audio-Sync] Line=4 | 鍖归厤 | [current_slot_audio_len=1000 sk
=1000] | Timeline: 5000 -> 6000
[DEBUG] [Audio-Sync] Line=5 | 鍖归厤 | [current_slot_audio_len=1000 sk
=1000] | Timeline: 6000 -> 7000
[DEBUG] [Audio-Sync] Line=6 | 鍖归厤 | [current_slot_audio_len=1000 sk
=1000] | Timeline: 7000 -> 8000
[WARNING] [Audio-Sync] 瀛楀箷[7] 瑙嗛妲芥椂闀夸负0锛屽洖閫€浣跨敤鍘熷鏃堕暱: 0ms

Logging error

Traceback (most recent call last):
File "logging\__init__.py", line 1103, in emit
AttributeError: 'NoneType' object has no attribute 'write'
Call stack:
File "videotrans\task\only_one.py", line 112, in run
File "videotrans\task\trans_create.py", line 666, in align
File "videotrans\task\_rate.py", line 396, in run
File "videotrans\task\_rate.py", line 640, in _concat_audio_aligned
File "logging\__init__.py", line 1489, in warning
File "logging\__init__.py", line 1624, in _log
File "logging\__init__.py", line 1634, in handle
File "logging\__init__.py", line 1696, in callHandlers
File "logging\__init__.py", line 968, in handle
File "logging\__init__.py", line 1108, in emit
Message: '[Audio-Sync] 瀛楀箷[7] 瑙嗛妲芥椂闀夸负0锛屽洖閫€浣跨敤鍘熷鏃堕暱: 0ms'
Arguments: ()
[DEBUG] [Audio-Sync] Line=7 | 闊抽鏈熬琛ラ潤闊?1ms | [current_slot_audio_len=0 sk
=1] | Timeline: 8000 -> 8001
[DEBUG] [Audio-Sync] Line=8 | 闊抽鏈熬琛ラ潤闊?240ms | [current_slot_audio_len=1760 sk
=2000] | Timeline: 8001 -> 10001
[DEBUG] [Audio-Sync] Line=9 | 闊抽鏈熬琛ラ潤闊?333ms | [current_slot_audio_len=1600 sk
=1933] | Timeline: 10001 -> 11934
[DEBUG] concat_txt='A:/BaiduNetdiskDownload/py/tmp/19660/a334810f85/final_audio_concat.txt',filelist[0]='A:/BaiduNetdiskDownload/py/tmp/19660/a334810f85/dubb-0-99cbdf3f08deeaab6fdb2dd8435a5b15.wav'
[DEBUG] [Audio-Concat] 鏈€缁堥煶棰戝凡鐢熸垚: A:/BaiduNetdiskDownload/py/tmp/19660/a334810f85/target.wav

[DEBUG] 璺宠繃浜屾璇嗗埆
[DEBUG]


==鍑嗗瑕佸祵鍏ョ殑瀛楀箷:self.sk
_type=2
=
[DEBUG] 鏈€缁堢‘瀹氬瓧骞曞祵鍏ョ被鍨?2 ,鐩爣瀛楀箷璇█:zho, 瀛楀箷鏂囦欢:A:/BaiduNetdiskDownload/py/tmp/19660/a334810f85/end.srt

[DEBUG] [鏈€缁堣棰戝悎鎴怾copy妯″紡锛屾棤闇€閲嶆柊缂栫爜:
['-y', '-progress', 'compose1780306550.488022.txt', '-i', 'novoice.mp4', '-i', 'origin_audio.m4a', '-i', 'end.srt', '-map', '0:v', '-map', '1:a', '-map', '2:s', '-c:v', 'copy', '-c:a', 'copy', '-c:s', 'mov_text', '-metadata:s:s:0', 'language=zho', '-movflags', '+faststart', '-t', '11.933000', 'laste_target.mp4']
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -progress compose1780306550.488022.txt -i novoice.mp4 -i origin_audio.m4a -i end.srt -map 0:v -map 1:a -map 2:s -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=zho -movflags +faststart -t 11.933000 laste_target.mp4

问题已明确:最终合成命令始终使用 origin_audio.m4a(原始音频),而非 generated target.wav(配音音频),这是软件在当前设置下(AudioRate=False, VideoRate=False)的一个逻辑问题——未启用音频加速或视频慢速时,合成阶段直接复用原始音频轨道,而不替换为配音音频。

解决方案

  1. 强制启用音频加速:勾选主界面“音频加速”,并确保“视频慢速”未勾选。
  2. 清理缓存:勾选左上角“清理已生成”,并手动删除 _video_out 下对应视频的缓存文件夹。
  3. 清除高级选项中的自定义参数:在菜单 → 工具 → 高级选项中,检查是否有自定义的 ffmpeg 参数或强制软编码等设置,全部恢复默认。
  4. 使用单视频交互模式测试:只选择一个视频,观察在配音阶段是否弹出编辑窗口,确认配音是否已生成且替换。
  5. 若仍无效:请打开 _video_out 文件夹下 {视频名}-mp4 文件夹,播放其中的 zh-cn.m4a 文件确认它是否为中文配音音频。如果 zh-cn.m4a 已经是中文配音,则问题仅在于最后封装时软件出 bug。此时可手动使用 ffmpeg 命令替换视频的音频轨道:

    ffmpeg -i 原视频.mp4 -i zh-cn.m4a -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 最终视频.mp4

    即可得到正确结果。

高级选项的设置里之前我更改过可能有错误,能把高级选项里的所有建议设置参数发给我吗

以下是高级选项(菜单 → 工具 → 高级选项)的建议默认设置。如果之前修改过,建议逐一恢复为以下值,或直接删除软件根目录下的 videotrans/cfg.jsonvideotrans/params.json 文件(需重启软件)以重置全部设置。

通用设置

  • 软件界面语言:简体中文(或你需要的语言)
  • 单视频交互翻译暂停倒计时:10(设为0则跳过编辑窗口)
  • 独立功能输出目录:留空(默认 output/)
  • 失败后重试次数:2
  • LLM重新断句每批字幕行数:20
  • LLM重新断句所用AI渠道:OpenAI-ChatGPT 或 DeepSeek
  • 禁用桌面通知:不勾选
  • 批量翻译视频时每批数量:0(不限制)
  • 主界面显示所有参数?:不勾选
  • CPU同时任务数[重启生效]:1
  • GPU同时任务数[重启生效]:1
  • 多显卡模式[重启生效]:不勾选

视频输出控制

  • 视频输出质量控制:23
  • 输出视频压缩率:medium
  • 264/265编码:264
  • 输出视频格式(mp4/mkv):mp4
  • 强制软编码视频?:不勾选
  • 视频合成cuda硬解码:不勾选
  • 自定义ffmpeg命令参数:留空

语音识别参数

  • 选择VAD:默认(或 silero)
  • 语音阈值:0.5
  • 非语音阈值:0.5
  • 最长语音持续秒数:6
  • 最短语音持续毫秒:1000
  • 静音分割持续毫秒:500
  • 合并过短字幕到邻近:勾选
  • Whisper预分割音频?:不勾选(若使用 clone 则勾选,并调高最短语音至3000)
  • 说话人分离模型:内置模型
  • Huggingface的token:留空
  • CUDA数据类型:default
  • 识别准确度beam_size:5
  • 识别准确度best_of:5
  • 启用上下文感知:不勾选
  • 重复惩罚:1.0
  • 文本压缩率:1.0
  • 采样温度:0.0
  • 热词:留空
  • faster-whisper模型:留空(使用默认列表)
  • whisper.cpp模型:留空
  • Gemini语音识别每批切片数:4
  • 字幕繁体转简体:不勾选
  • 删除字幕末尾标点?:不勾选

字幕翻译调整

  • 传统翻译渠道每批字幕行数:10
  • AI翻译渠道每批字幕行数:10
  • AI翻译一次性翻译所有字幕行:不勾选(除非使用超长上下文模型)
  • 翻译后暂停秒:0
  • 发送完整字幕:勾选(AI渠道时建议勾选)
  • AI翻译模型温度值:0.2

字幕配音调整

  • 并发配音线程数:1
  • 配音后暂停秒:0(Edge-TTS设为5)
  • 移除配音前后静音缓冲:不勾选
  • 保留每条字幕的配音文件:不勾选
  • 文本规范化:勾选
  • ChatTTS音色值:留空
  • EdgeTTS配音渠道配音并发数:1
  • EdgeTTS配音渠道失败重试次数:2
  • 人声背景分离线程数:1
  • 分离背景声模型:默认

字幕声音画面对齐

  • 音频加速最大倍数:100
  • 视频慢放最大倍数:10
  • 中日韩字幕单行字符数:20
  • 其他语言字幕单行字符数:46

Whisper模型提示词(留空即可)

核心原则:恢复默认后,在主界面只勾选“音频加速”,其他加速/慢速/分离/静音等选项均不勾选,即可避免音频替换失败的问题。


Application started at 2026-06-01 17:45:22

[DEBUG] 涓婃缂撳瓨鐨勮鑹?clone,瀛楀箷宓屽叆绫诲瀷:2,鍙戦煶璇█:鑻辫,鐩爣璇█:绠€浣撲腑鏂囷紝鐩爣璇█浠g爜:zh-cn,妯″瀷:large-v3-turbo,TTS娓犻亾[2]
[DEBUG] NVIDIA_GPU_NUMS=1
[DEBUG] Found 1 GPUs, cost=1s
[DEBUG] process_max_gpu=1,is_multi_gpus=False
[DEBUG] Concurrent task_nums=1, process_max_cpu=1
[DEBUG] 杩斿洖缂撳瓨鐨勭紪瑙g爜鍣?Windows-264: h264_nvenc
[DEBUG] start 9 jobs
[DEBUG] 杩斿洖缂撳瓨鐨勭紪瑙g爜鍣?Windows-265: hevc_nvenc
[DEBUG] [鍗曡棰戠炕璇戞ā寮廬:A:/Users/ASUS/Downloads/1.mp4
[DEBUG] [TransCreate]鏈€缁堥厤缃俊鎭細self=TransCreate(uuid='a334810f85', proxy_str='http://127.0.0.1:7890', last_down_time=0, precent=1, hasend=False, should_recogn=True, should_trans=True, should_dubbing=True, shsk
=False, should_hebing=True, source_srt_list=[], target_srt_list=[], video_time=0.0, is_copy_video=False, video_codec_num=264, ignore_align=False, is_audio_trans=False, clone_ref='', sk
=1780307135.3799703, should_recogn2=False)
self.cfg=TaskCfgVTT(uuid='a334810f85', name='A:/Users/ASUS/Downlo
......
| 闊抽鏈熬琛ラ潤闊?1080ms | [current_slot_audio_len=1920 sk
=3000] | Timeline: 2000 -> 5000
[DEBUG] [Audio-Sync] Line=4 | 鍖归厤 | [current_slot_audio_len=1000 sk
=1000] | Timeline: 5000 -> 6000
[DEBUG] [Audio-Sync] Line=5 | 鍖归厤 | [current_slot_audio_len=1000 sk
=1000] | Timeline: 6000 -> 7000
[DEBUG] [Audio-Sync] Line=6 | 鍖归厤 | [current_slot_audio_len=1000 sk
=1000] | Timeline: 7000 -> 8000
[WARNING] [Audio-Sync] 瀛楀箷[7] 瑙嗛妲芥椂闀夸负0锛屽洖閫€浣跨敤鍘熷鏃堕暱: 0ms

Logging error

Traceback (most recent call last):
File "logging\__init__.py", line 1103, in emit
AttributeError: 'NoneType' object has no attribute 'write'
Call stack:
File "videotrans\task\only_one.py", line 112, in run
File "videotrans\task\trans_create.py", line 666, in align
File "videotrans\task\_rate.py", line 396, in run
File "videotrans\task\_rate.py", line 640, in _concat_audio_aligned
File "logging\__init__.py", line 1489, in warning
File "logging\__init__.py", line 1624, in _log
File "logging\__init__.py", line 1634, in handle
File "logging\__init__.py", line 1696, in callHandlers
File "logging\__init__.py", line 968, in handle
File "logging\__init__.py", line 1108, in emit
Message: '[Audio-Sync] 瀛楀箷[7] 瑙嗛妲芥椂闀夸负0锛屽洖閫€浣跨敤鍘熷鏃堕暱: 0ms'
Arguments: ()
[DEBUG] [Audio-Sync] Line=7 | 闊抽鏈熬琛ラ潤闊?1ms | [current_slot_audio_len=0 sk
=1] | Timeline: 8000 -> 8001
[DEBUG] [Audio-Sync] Line=8 | 闊抽鏈熬琛ラ潤闊?160ms | [current_slot_audio_len=1840 sk
=2000] | Timeline: 8001 -> 10001
[DEBUG] [Audio-Sync] Line=9 | 闊抽鏈熬琛ラ潤闊?573ms | [current_slot_audio_len=1360 sk
=1933] | Timeline: 10001 -> 11934
[DEBUG] concat_txt='A:/BaiduNetdiskDownload/py/tmp/14480/a334810f85/final_audio_concat.txt',filelist[0]='A:/BaiduNetdiskDownload/py/tmp/14480/a334810f85/dubb-0-99cbdf3f08deeaab6fdb2dd8435a5b15.wav'
[DEBUG] [Audio-Concat] 鏈€缁堥煶棰戝凡鐢熸垚: A:/BaiduNetdiskDownload/py/tmp/14480/a334810f85/target.wav

[DEBUG] 璺宠繃浜屾璇嗗埆
[DEBUG]


==鍑嗗瑕佸祵鍏ョ殑瀛楀箷:self.sk
_type=2
=
[DEBUG] 鏈€缁堢‘瀹氬瓧骞曞祵鍏ョ被鍨?2 ,鐩爣瀛楀箷璇█:zho, 瀛楀箷鏂囦欢:A:/BaiduNetdiskDownload/py/tmp/14480/a334810f85/end.srt

[DEBUG] 杩斿洖缂撳瓨鐨勭紪瑙g爜鍣?Windows-264: h264_nvenc
[DEBUG] [鏈€缁堣棰戝悎鎴怾copy妯″紡锛屾棤闇€閲嶆柊缂栫爜:
['-y', '-progress', 'compose1780307161.9212863.txt', '-i', 'novoice.mp4', '-i', 'origin_audio.m4a', '-i', 'end.srt', '-map', '0:v', '-map', '1:a', '-map', '2:s', '-c:v', 'copy', '-c:a', 'copy', '-c:s', 'mov_text', '-metadata:s:s:0', 'language=zho', '-movflags', '+faststart', '-t', '11.933000', 'laste_target.mp4']
[DEBUG] [FFMPEG-CMD]:
ffmpeg -hide_banner -nostdin -ignore_unknown -threads 0 -y -progress compose1780307161.9212863.txt -i novoice.mp4 -i origin_audio.m4a -i end.srt -map 0:v -map 1:a -map 2:s -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=zho -movflags +faststart -t 11.933000 laste_target.mp4

问题定位与解决方向已明确,下面是针对你日志的精准回复。


日志中 AudioRate=False, VideoRate=False,说明“音频加速”和“视频慢速”均未生效。尽管你已按建议勾选了“音频加速”,但日志显示未启用。可能原因和解决方案如下:

  1. 缓存残留导致配置未更新

    • 勾选主界面左上角“清理已生成”。
    • 手动删除 _video_out 下对应视频的整个缓存文件夹(例如 1-mp4)。
    • 删除软件根目录下 tmp 文件夹内的所有内容。
    • 重新启动软件,然后重新设置“音频加速”为勾选状态。
  2. 检查“音频加速”是否真实生效

    • 在开始执行前,确认主界面“音频加速”的复选框是显式勾选的(图标为选中状态)。
    • 如果仍无效,可试着手动点击一下取消再勾选,确保状态变更被保存。
  3. 单视频交互模式下的配置覆盖

    • 日志显示 [单视频翻译模式],单视频模式下配置读取逻辑可能与批量不同。可在“高级选项”中将 单视频交互翻译暂停倒计时 设为 0 以跳过编辑窗口,避免中途配置被修改。
  4. 验证 origin_audio.m4a 的实际内容

    • 进入输出目录 _video_out/{视频名}-mp4/,播放其中的 origin_audio.m4a 文件,听取它是否已是中文配音
    • 如果是,则最终视频的声音已经是正确的,只是日志中显示的文件名未变,实际内容已被替换。此时视频是正常的
  5. 强制重置配置(最后手段)

    • 关闭软件,进入软件根目录(例如 D:\pyVideoTrans),找到 videotrans/cfg.jsonvideotrans/params.json 两个文件。
    • 将它们重命名备份(或直接删除)。
    • 重新启动软件,所有设置恢复默认。然后在主界面仅勾选“音频加速”和“嵌入硬字幕”,其他参数不动,再次测试。
  6. 手动替换音频作为临时解决
    如果问题依旧,且你确认 target.wav 就是正确的中文配音,可用 ffmpeg 手动合成(替换原有视频中的音频):

    ffmpeg -i 原视频.mp4 -i _video_out/{视频名}-mp4/target.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 最终视频_配音版.mp4

总结:本问题在 v4.00 版本中,当同时未勾选“音频加速”和“视频慢速”时,软件会跳过配音替换直接复用原声,这属于软件逻辑层面的缺陷。请严格按照上述步骤清理缓存并强制启用“音频加速”,即可解决。

克隆后的配音有杂音不清晰

克隆配音有杂音不清晰,核心原因是参考音频质量不佳或使用时长短于模型要求。具体原因和改进方法如下:参考音频未经过降噪处理原视频中人声可能带有背景噪音或混响,这些噪声会被克隆到配音中。请在“设置更多参数”中勾选“分离人声背景声”或“降噪”(通常勾选“分离人声背景声”即可),让软件先提取干净的人声片段作为克隆参考。参考音频时长超出或不足模型要求OmniVoice、F5-TTS、CosyVoice 等克隆时,参考音频(自动从原视频裁剪的片段)最佳时长范围为 3-10 秒。进入“菜单 → 工具 → 高级选项 → 语音识别参数”,将“最短语音持续毫秒”设为 3000,“最长语音持续秒数”设为 10,并勾选“Whisper预分割音频”和“合并过短字幕到邻近”。这样能确保用作克隆的参考片段落在合理范围内。字幕分割过细导致克隆参考片段太短如果字幕很多短于 3 秒,系统会用过短的片段做参考,导致音质差。请优先使用 OmniVoice 配音渠道,它对短参考音频容忍度更高;若使用 F5-TTS 或 CosyVoice,则必须确保参考音频时长 > 3 秒。显存不足导致模型降级处理若显卡显存不足(< 8GB),TTS 模型可能自动降低精度产生杂音。可尝试在高级选项中降低“CUDA数据类型”为 float16 或 int8,并调低 beam_size 和 best_of 为 1。建议操作顺序:将声道渠道切换为 OmniVoice(非 clone 角色)测试一次,确认是否仍存在杂音。若没有问题,则说明是参考音频本身的问题,请按照上述配置优化语音识别参数并开启降噪。若仍有杂音,请检查参考音频文件(位于软件根目录 f5-tts/ 下)是否被正确获取,并确保其采样率为 22050Hz 或 44100Hz 且为单声道 WAV 格式。

可以上传已经识别出说话人的srt字幕吗?

可以。将已有说话人标记的 SRT 字幕放入视频输出目录 _video_out/{视频名}-mp4 并分别重命名为 en.srt(原语言)和 zh-cn.srt(目标语言)后,软件会自动跳过语音识别和翻译阶段,直接使用该字幕。但软件 不会自动解析 字幕文本中的说话人标签(如 [Speaker1])来分配角色。若需多角色配音,请在单视频交互模式中,待翻译完成后弹出的“说话人角色分配对话框”内,手动为每条字幕选择配音角色;或使用左侧工具栏的“字幕多角色配音”功能导入 SRT 后逐行分配。

只可在左侧功能面板中的字幕多角色配音中上传带说话人的srt字幕,才可自动使用。其他个功能中都不支持

克隆的声音非常嘈杂有噪音,是不是配音渠道的愿意?我使用的是omni

根据开发者回复,您提到的“上传带说话人的srt字幕”仅在左侧功能面板的“字幕多角色配音”中支持自动使用,其他功能中均不支持。在常规视频翻译流程中,需要手动在单视频交互模式下的角色分配对话框内逐行指定角色。

关于克隆声音嘈杂的问题,这通常不是OmniVoice渠道本身的原因,而是参考音频的质量和配置问题。请按以下步骤排查:

  1. 确保参考音频干净:在“设置更多参数”中勾选“分离人声背景声”(或“降噪”),让软件提取干净的人声片段作为克隆参考。
  2. 调整语音识别参数:进入“菜单 → 工具 → 高级选项 → 语音识别参数”,将“最短语音持续毫秒”设为 3000,“最长语音持续秒数”设为 10,同时勾选“Whisper预分割音频”和“合并过短字幕到邻近”。这能确保用作克隆的参考音频时长在3-10秒内,避免因片段过短或过长导致杂音。
  3. 检查显存:如果显卡显存不足(<8GB),可尝试在高级选项中降低“CUDA数据类型”为 float16int8,并调低 beam_sizebest_of 为1。
  4. 验证参考音频采样率:确保参考音频(自动截取自原视频)为 22050Hz或44100Hz的单声道WAV 格式。OmniVoice 对采样率兼容性较好,但过低的采样率仍可能影响音质。

如果完成以上调整后杂音依旧,请临时改用 OmniVoice 的 非 clone 角色(如 F1)测试,确认无杂音后,再返回 clone 模式,从而确定是参考音频本身的问题。

Post Your Reply
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update.

Related resource