#4392 在不勾选清理已生成的前题下,已经配过的音频如何在第2次合成时自动调用

103.172* Posted at: 8 hours ago 👁19

在不勾选清理已生成的前题下,已经配过的音频如何在第2次合成时自动调用

9 Replies

不勾选“清理已生成”时,软件会自动复用上一次任务生成的配音文件,无需重新合成。这是由内置缓存机制决定的。

如果第二次合成时没有自动调用已有的配音,可能的原因和检查点:

  1. 缓存文件是否完整存在:软件会在原视频所在目录下的 _video_out 文件夹(或自定义输出目录)以及临时缓存目录生成配音音频。如果这些文件被手动删除或移动,缓存就会失效。
  2. 任务参数是否发生变化:更换配音角色、目标语言、语速、音量等任何与配音相关的设置,都会导致软件不再复用旧缓存,而是重新生成。
  3. 软件版本的差异:不同版本生成的缓存文件可能不兼容,升级后旧缓存会被忽略。

只要保持以上条件不变,第二次运行时就会直接跳过配音阶段,使用已有的配音音频进行后续合成。

并没有跳过

这是因为配音缓存文件在软件关闭时被自动清理了。在 pyVideoTrans 中,配音阶段生成的音频临时存放在软件根目录的 tmp 文件夹内,正常退出程序时会自动删除这些临时文件。因此,如果第二次合成时已经重启过软件,先前的配音音频就不复存在,自然会重新生成,不会自动跳过。

要让第二次合成直接复用已有的配音,可尝试以下方法:

  1. 保持软件不关闭:在同一次运行期间连续两次执行合成任务,此时 tmp 内的文件不会被清理,缓存会生效。
  2. 手动备份临时文件:关闭软件前将 tmp 文件夹复制到其他位置,下次使用前再覆盖回来(注意版本兼容风险)。
  3. 检查任务参数是否变动:如果关闭软件前已经修改了配音角色、语速、音量、目标语言中的任何一项,缓存也将失效,需要重新生成。

如果以上情况均未发生,且仍不能复用,可能因软件版本问题,建议升级到最新 v3.99 及以上版本。

请查阅相关文档:

{'_type': 'gradio.FileData'}, 'orig_name': 'en_000001_80_chn.wav'}}
[DEBUG] post={'prompt': {'path': 'E:/win-pyvideotrans-v3.99-428/f5-tts/en_000001_80_chn.wav', 'meta': {'_type': 'gradio.FileData'}, 'orig_name': 'en_000001_80_chn.wav'}, 'text': '订阅并点亮小铃铛,这样系列发布时,你就不会错过任何一期视频。', 'api_name': '/gen_single', 'emo_ref_path': {'path': 'E:/win-pyvideotrans-v3.99-428/f5-tts/en_000001_80_chn.wav', 'meta': {'_type': 'gradio.FileData'}, 'orig_name': 'en_000001_80_chn.wav'}}
[DEBUG] index-tts data={'ref_wav': 'E:/win-pyvideotrans-v3.99-428/f5-tts/en_000001_80_chn.wav'}
[DEBUG] post={'prompt': {'path': 'E:/win-pyvideotrans-v3.99-428/f5-tts/en_000001_80_chn.wav', 'meta': {'_type': 'gradio.FileData'}, 'orig_name': 'en_000001_80_chn.wav'}, 'text': '这个免费的系列教程,带你从零基础直接到专业水准。', 'api_name': '/gen_single', 'emo_ref_path': {'path': 'E:/win-pyvideotrans-v3.99-428/f5-tts/en_000001_80_chn.wav', 'meta': {'_type': 'gradio.FileData'}, 'orig_name': 'en_000001_80_chn.wav'}}
[DEBUG] post={'prompt': {'path': 'E:
......
Data\Local\Temp\gradio\9dbd846973f441500a1d6a463a295850001a42ab104ec1529c4ebf2c9d007ec5\spk_1777781626.wav', '__type__': 'update'}
[DEBUG] result={'visible': True, 'value': 'C:\Users\Admin\AppData\Local\Temp\gradio\4f3ecbf3601fa995aad5219af3a3f8366e0ee0f78825329a5a679c8e2ccb74fa\spk_1777781632.wav', '__type__': 'update'}
[DEBUG] result={'visible': True, 'value': 'C:\Users\Admin\AppData\Local\Temp\gradio\5266f328c9fe16745fb8dea666226c4588d9ba5bf5c346ec0c76c0e420beaef2\spk_1777781636.wav', '__type__': 'update'}
[DEBUG] [字幕配音]渠道11:共耗时:53s
speedrate



[DEBUG] [SpeedRate] Init. AudioRate=True, VideoRate=False, Rubberband=True
[DEBUG] [SpeedRate] 启用变速,进入对齐模式。
[DEBUG] [Calc] Mode=Only Audio Line=1 | Source=6336 Dubb=4969 -> TargetV=6336 TargetA=6336
[DEBUG] [Calc] Mode=Only Audio Line=2 | Source=4896 Dubb=2752 -> TargetV=4896 TargetA=4896
[DEBUG] [Calc] Mode=Only Audio Line=3 | Source=5232 Dubb=4133 -> TargetV=5232 TargetA=5232
[DEBUG] [Calc] Mode=Only Audio Line=4 | Source=7968 Dubb=6026 -> TargetV=7968 TargetA=7968
[DEBUG] [Calc] Mode=Only Audio Line=5 | Source=5920 Dubb=4725 -> TargetV=5920 TargetA=5920
[DEBUG] [Calc] Mode=Only Audio Line=6 | Source=6720 Dubb=4888 -> TargetV=6720 TargetA=6720
[DEBUG] [Calc] Mode=Only Audio Line=7 | Source=8357 Dubb=4841 -> TargetV=8357 TargetA=8357
[DEBUG] [Audio] 开始对齐拼接...
[DEBUG] [Audio-Sync] Line=1 | 音频末尾补静音 1367ms | [current_slot_audio_len=4969 slot_duration=6336] | Timeline: 112 -> 6448
[DEBUG] [Audio-Sync] Line=2 | 音频末尾补静音 2144ms | [current_slot_audio_len=2752 slot_duration=4896] | Timeline: 6448 -> 11344
[DEBUG] [Audio-Sync] Line=3 | 音频末尾补静音 1099ms | [current_slot_audio_len=4133 slot_duration=5232] | Timeline: 11344 -> 16576
[DEBUG] [Audio-Sync] Line=4 | 音频末尾补静音 1942ms | [current_slot_audio_len=6026 slot_duration=7968] | Timeline: 16576 -> 24544
[DEBUG] [Audio-Sync] Line=5 | 音频末尾补静音 1195ms | [current_slot_audio_len=4725 slot_duration=5920] | Timeline: 24544 -> 30464
[DEBUG] [Audio-Sync] Line=6 | 音频末尾补静音 1832ms | [current_slot_audio_len=4888 slot_duration=6720] | Timeline: 30464 -> 37184
[DEBUG] [Audio-Sync] Line=7 | 音频末尾补静音 3516ms | [current_slot_audio_len=4841 slot_duration=8357] | Timeline: 37184 -> 45541
[DEBUG] concat_txt='E:/win-pyvideotrans-v3.99-428/tmp/25336/e31576e917/final_audio_concat.txt',filelist[0]='E:/win-pyvideotrans-v3.99-428/tmp/25336/e31576e917/silence_head_0.wav'
[DEBUG] [Audio-Concat] 最终音频已生成: E:/win-pyvideotrans-v3.99-428/tmp/25336/e31576e917/target.wav
[DEBUG]

==准备要嵌入的字幕:self.cfg.subtitle_type=3
=
[DEBUG] 最终确定字幕嵌入类型:3 ,目标字幕语言:chi, 字幕文件:E:/win-pyvideotrans-v3.99-428/tmp/25336/e31576e917/shuang.srt

[DEBUG] 原始hw_type='h264_nvenc'
[DEBUG] 整理后hw_type='nvenc'
[DEBUG] [尝试硬件编解码执行命令]
-y -progress compose1777781664.1321588.txt -i novoice.mp4 -i origin_audio.m4a -filter_complex [0:v]subtitles=filename='shuang.ass'[v_out] -map [v_out] -map 1:a -c:v h264_nvenc -c:a copy -cq 23 -preset p4 -movflags +faststart -t 45.541000 laste_target.mp4

配音临时文件保存在 tmp 目录,软件关闭时会被自动清理。你提供的日志显示第二次合成时又重新执行了配音阶段(“渠道11:共耗时”),说明此时已经重启过软件,原有缓存已失效。

要避免重新配音,可尝试以下其中一种方式:

  1. 在同一运行窗口内连续合成同一个视频,不关闭软件,此时 tmp 中的配音文件会一直存在并被复用。
  2. 关闭软件前,手动将 tmp 目录整体复制到其他位置,下一次合成前再覆盖原 tmp 目录(注意软件版本需一致)。
  3. 菜单 → 工具/选项 → 高级选项 → 字幕配音调整 中,勾选 保留每条字幕的配音文件,该选项会将每一次生成的配音音频存储到输出目录下,后续有时会被自动调用(但要注意这会增加文件占用)。

请查阅相关文档:

不行,而且tmp里没有配音临时文件

已记录的日志显示配音阶段被重新执行,根本原因是软件关闭时自动清理了存放配音缓存的 tmp 目录。即使未勾选“清理已生成”,该目录依然会随软件退出而被清空,导致下次运行必然重新配音。

要让第二次合成直接调用已完成的配音,必须保护好这些临时文件。请尝试以下其中一种方案:

  1. 保持软件不关闭
    在第一次合成完成后,不要退出软件,立即再次添加同一个视频点击开始。此时 tmp 内的配音文件全部存在,缓存机制会跳过配音阶段。
  2. 手动备份并恢复 tmp 目录
    第一次合成完毕后(不要关闭软件),将软件根目录下的 tmp 文件夹整个复制到其他位置。
    下次使用前,先启动软件,再将备份的 tmp 覆盖回原位置,即可复用所有缓存。
  3. 启用“保留配音文件”选项(需验证)
    点击菜单 → 工具/选项 → 高级选项 → 字幕配音调整,勾选 保留每条字幕的配音文件。这会让每一句配音的 .wav 存入输出目录下的 output_audio 文件夹。但这些文件是否被软件自动识别为缓存尚无确定,至少可作为手工导入配的素材。
  4. 检查目标语言音频是否已驻留输出目录
    软件开始配音前会检查 原视频名_target.wav 是否存在于输出目录(通常在原视频同目录下的 _video_out 文件夹)。如果第一次合成时该文件没有被清理,第二次就会直接使用。你可以进入 _video_out 查看是否存在,若已消失,只能依靠方案2恢复。

为什么临时文件会丢失?
每次正常退出软件都会执行清理,这是为防止硬盘空间被大量中间文件占满。只有保持运行、手动备份或启用保留选项才可避免。

如果以上方法仍不奏效,可能与所用配音渠道(例如 F5-TTS)的缓存实现有关,可提供完整报错或日志进一步分析。

请查阅相关文档:

但我没有关闭过软件

根据日志分析,你在没有关闭软件的情况下,第二次合成时仍然触发了重新配音。这说明即便不关闭软件,配音阶段的临时音频缓存也在第一次翻译任务完成后被自动清除了。这是 pyVideoTrans 的一项设计:为了节省磁盘空间,当一个完整的视频翻译任务(配音→对齐→合成)结束时,软件会立即删除该任务在 tmp 目录下生成的中间配音文件(例如分句 wav、拼接后的 target.wav 等)。因此,即使你没有退出软件,只要上一次翻译任务已经彻底完成,tmp 中就不会再有任何可供复用的配音备份。

要让第二次合成直接调用已生成的配音,目前只有以下两种可行的方案:

  1. 保持任务未完成状态
    在第一次合成任务进行到“配音完成”但尚未执行“对齐与合成”之前,立即添加同一个视频并开启第二次合成。此时 tmp 中的配音文件尚未被删除,缓存机制会将其复用。一旦第一个任务进入“合成视频”阶段,这些临时文件就会被清理,后续就无法自动调用了。
  2. 启用“保留每条字幕的配音文件”并手动复用

    • 点击菜单 → 工具/选项 → 高级选项 → 字幕配音调整,勾选 “保留每条字幕的配音文件”
    • 此后每次配音完成,每一句配音的 wav 都会保存在输出目录下的 output_audio 文件夹中(通常位于原视频目录的 _video_out 内)。
    • 第二次合成前,你可以手动将这些 wav 文件按照字幕序号拼接成完整的配音音频,或直接使用软件内置的“批量为字幕配音”功能生成新的目标音频。
    但需要注意的是,此选项不会让软件自动识别已保存的分句 wav 作为缓存,需要你手动操作。真正的自动化复用目前仅支持同一次运行内且任务未完成阶段的临时文件。

为什么“未勾选清理已生成”也无法保留?
“清理已生成”仅决定是否删除输出目录(_video_out)里的最终视频或字幕文件,与 tmp 中的临时音频缓存无关。tmp 目录的清理策略是强制性的,无论该选项如何设置,任务完全结束后都会清空对应任务的临时文件夹。

如果仍希望彻底解决,可尝试在反馈中附上完成日志,以便检测是否可调整清理时机,但当前版本(v3.99)的设计就是如此。

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