jianchang512 / pyvideotrans

Translate the video from one language to another and add dubbing. 将视频从一种语言翻译为另一种语言,并支持api调用
https://pyvideotrans.com
GNU General Public License v3.0
10.21k stars 1.13k forks source link

请增加转写质量控制功能 #416

Closed extremk closed 2 months ago

extremk commented 4 months ago

请增加一个选项,faster-whisper 转写质量控制 默认 和 高品质

加载模型的时候,高品质模式使用 float32模式,实测至少需要16G显存

以下是实测可用的设置 :

vad_filter : True -threshold : 0.5 -min_speech_duration_ms : 250 -max_speech_duration_s : 8.0 -min_silence_duration_ms : 600 -window_size_samples : 1536 *改了这里,加大了 1536是质量最高的值 -speech_pad_ms : 400

language:None Transcribes options: -audio : ['D:/视频/20220816 - EvQG3uLq8ys - Singgang Ikan Kembung-NoSub.wav'] -language : None -task : False -beam_size : 20 改了这里,加大了 - 增加波束搜索大小,提高识别准确性。 -best_of : 20 改了这里,加大了 - 增加候选解数量,提高识别准确性。 -patience : 1.2 改了这里,加大了 - 增加忍耐系数,以减少早停,提高准确性。 -length_penalty : 2.0 改了这里,加大了 - 适度增加长度惩罚系数,以控制生成文本的长度。 -temperature : [0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5] 改了这里,删除了一些较高的值,并且更精细化 - 使用较低的温度值生成较确定的输出。 -compression_ratio_threshold : 2.0 降低了这里 - 降低压缩比阈值,以保留更多细节。 原先 2.4
-log_prob_threshold : -1.0 -no_speech_threshold : 0.6 -condition_on_previous_text : True 设置为了True - 基于前文条件生成,提高连贯性。 -initial_prompt : None -prefix : None -suppress_blank : True -suppress_tokens : [-1] -without_timestamps : False -max_initial_timestamp : 60.0 -word_timestamps : True -prepend_punctuations : "'“¿([{- -append_punctuations : "'.。,,!!??::”)]}、 -repetition_penalty : 1.2 改了这里,1调成 1.2 - 增加重复惩罚系数,减少重复。 -no_repeat_ngram_size : 0 -prompt_reset_on_temperature : 0.5

GPT4o对参数的解释: 如果优先考虑语音识别的质量,可以设置如下参数:

VAD过滤器参数

  1. vad_filter: True

    • 启用VAD过滤器。
  2. -threshold: 0.3

    • 语音活动检测的阈值设置为较低值,使其更敏感,以捕捉更多的语音。
  3. -min_speech_duration_ms: 200

    • 最小语音持续时间设置为较小值,以确保短语音也能被捕捉。
  4. -max_speech_duration_s: 10.0

    • 最大语音持续时间设置为较大值,以减少语音段的分割。
  5. -min_silence_duration_ms: 800

    • 最小静音持续时间设置为较高值,以减少语音段的分割。
  6. -window_size_samples: 2048

    • 增加窗口大小,提高检测的准确性。
  7. -speech_pad_ms: 500

    • 增加语音段的填充时间,以确保语音段的完整性。

语音识别参数

  1. -audio: ['D:/.../vocals.wav']

    • 输入音频文件路径。
  2. -language: None

    • 自动检测语言。
  3. -task: False

    • 默认任务。
  4. -beam_size: 20

    • 增加波束搜索大小,提高识别准确性。
  5. -best_of: 20

    • 增加候选解数量,提高识别准确性。
  6. -patience: 1.2

    • 增加忍耐系数,以减少早停,提高准确性。
  7. -length_penalty: 2.0

    • 适度增加长度惩罚系数,以控制生成文本的长度。
  8. -temperature: [0.0, 0.1, 0.2]

    • 使用较低的温度值生成较确定的输出。
  9. -compression_ratio_threshold: 2.0

    • 降低压缩比阈值,以保留更多细节。
  10. -log_prob_threshold: -1.0

    • 保持默认,忽略低置信度部分。
  11. -no_speech_threshold: 0.5

    • 调整无语音阈值,以平衡语音和静音检测。
  12. -condition_on_previous_text: True

    • 基于前文条件生成,提高连贯性。
  13. -initial_prompt: None

    • 初始提示词不设置。
  14. -prefix: None

    • 前缀不设置。
  15. -suppress_blank: True

    • 抑制空白符生成。
  16. -suppress_tokens: [-1]

    • 抑制生成特定标记。
  17. -without_timestamps: False

    • 输出时间戳。
  18. -max_initial_timestamp: 60.0

    • 保持默认。
  19. -word_timestamps: True

    • 输出每个单词的时间戳。
  20. -prepend_punctuations: "'“¿([{-"

    • 前置标点符号。
  21. -append_punctuations: "'.。,,!!??::”)]}、"

    • 后置标点符号。
  22. -repetition_penalty: 1.2

    • 增加重复惩罚系数,减少重复。
  23. -no_repeat_ngram_size: 3

    • 设置防止重复的n元文法大小。
  24. -prompt_reset_on_temperature: 0.5

    • 保持默认。

通过以上设置,可以显著提高语音识别的准确性和质量,但需要较高的计算资源和处理时间。如果在实际应用中需要进一步调整参数,可以根据实际效果进行微调。

extremk commented 4 months ago

另外建议把faster-whisper的参数移入专门的ini文件 因为参数很多,也非常影响字幕识别体验,尤其是小语种,影响很大

上面部分我修改后,能感觉到识别准确度有提升

vad部分 -max_speech_duration_s : 8.0 -min_silence_duration_ms : 600 这两个非常影响生成字幕体验,默认的值 -max_speech_duration_s -inf 和 -min_silence_duration_ms : 2000 会导致生成长的文本,可能不太适合做字幕,建议放入ini文件中供自由修改

还有一些参数 比如 -max_initial_timestamp : 60.0 我也做了修改,因为有些视频片头很长,默认设置下,容易导致第一句字幕对不准,视频一开始就立即出现第一句,可以偏离长达15秒以上

-word_timestamps : True 对每个单词做时间戳标记,但我未作测试,打开后有可能可以更精准的对齐,最终SRT可以丢弃掉单词时间戳