1
1
import argparse
2
2
import asyncio
3
- import sys
4
3
5
- from yuisub . sub import bilingual , load , translate
4
+ from yuisub import SubtitleTranslator
6
5
7
- # ffmpeg -i test.mkv -c:a mp3 -map 0:a:0 test.mp3
8
- # ffmpeg -i test.mkv -map 0:s:0 eng.srt
6
+ parser = argparse .ArgumentParser (description = "Generate Bilingual Subtitle from audio or subtitle file" )
9
7
10
- parser = argparse .ArgumentParser ()
11
- parser .description = "Generate Bilingual Subtitle from audio or subtitle file"
12
- # input
8
+ # Input
13
9
parser .add_argument ("-a" , "--AUDIO" , type = str , help = "Path to the audio file" , required = False )
14
10
parser .add_argument ("-s" , "--SUB" , type = str , help = "Path to the input Subtitle file" , required = False )
15
- # subtitle output
11
+ # Output
16
12
parser .add_argument ("-oz" , "--OUTPUT_ZH" , type = str , help = "Path to save the Chinese ASS file" , required = False )
17
13
parser .add_argument ("-ob" , "--OUTPUT_BILINGUAL" , type = str , help = "Path to save the bilingual ASS file" , required = False )
18
- # openai gpt
14
+ # OpenAI GPT
19
15
parser .add_argument ("-om" , "--OPENAI_MODEL" , type = str , help = "Openai model name" , required = True )
20
16
parser .add_argument ("-api" , "--OPENAI_API_KEY" , type = str , help = "Openai API key" , required = True )
21
17
parser .add_argument ("-url" , "--OPENAI_BASE_URL" , type = str , help = "Openai base URL" , required = True )
22
- # bangumi
18
+ # Bangumi
23
19
parser .add_argument ("-bgm" , "--BANGUMI_URL" , type = str , help = "Anime Bangumi URL" , required = False )
24
20
parser .add_argument ("-ac" , "--BANGUMI_ACCESS_TOKEN" , type = str , help = "Anime Bangumi Access Token" , required = False )
25
- # whisper
21
+ # Whisper
26
22
parser .add_argument ("-d" , "--TORCH_DEVICE" , type = str , help = "Pytorch device to use" , required = False )
27
23
parser .add_argument ("-wm" , "--WHISPER_MODEL" , type = str , help = "Whisper model to use" , required = False )
28
24
@@ -33,47 +29,28 @@ async def main() -> None:
33
29
if args .AUDIO and args .SUB :
34
30
raise ValueError ("Please provide only one input file, either audio or subtitle file" )
35
31
32
+ if not args .AUDIO and not args .SUB :
33
+ raise ValueError ("Please provide an input file, either audio or subtitle file" )
34
+
36
35
if not args .OUTPUT_ZH and not args .OUTPUT_BILINGUAL :
37
36
raise ValueError ("Please provide output paths for the subtitles." )
38
37
39
- if args .AUDIO :
40
- import torch
41
-
42
- from yuisub .a2t import WhisperModel
43
-
44
- if args .TORCH_DEVICE :
45
- _DEVICE = args .TORCH_DEVICE
46
- else :
47
- _DEVICE = "cuda" if torch .cuda .is_available () else "cpu"
48
- if sys .platform == "darwin" :
49
- _DEVICE = "mps"
50
-
51
- if args .WHISPER_MODEL :
52
- _MODEL = args .WHISPER_MODEL
53
- else :
54
- _MODEL = "medium" if _DEVICE == "cpu" else "large-v2"
55
-
56
- model = WhisperModel (name = _MODEL , device = _DEVICE )
57
-
58
- sub = model .transcribe (audio = args .AUDIO )
59
-
60
- else :
61
- sub = load (args .SUB )
62
-
63
- sub_zh = await translate (
64
- sub = sub ,
38
+ translator = SubtitleTranslator (
65
39
model = args .OPENAI_MODEL ,
66
40
api_key = args .OPENAI_API_KEY ,
67
41
base_url = args .OPENAI_BASE_URL ,
68
42
bangumi_url = args .BANGUMI_URL ,
69
43
bangumi_access_token = args .BANGUMI_ACCESS_TOKEN ,
44
+ torch_device = args .TORCH_DEVICE ,
45
+ whisper_model = args .WHISPER_MODEL ,
70
46
)
71
47
72
- sub_bilingual = await bilingual (sub_origin = sub , sub_zh = sub_zh )
73
-
48
+ sub_zh , sub_bilingual = await translator .get_subtitles (
49
+ sub = args .SUB ,
50
+ audio = args .AUDIO ,
51
+ )
74
52
if args .OUTPUT_ZH :
75
53
sub_zh .save (args .OUTPUT_ZH )
76
-
77
54
if args .OUTPUT_BILINGUAL :
78
55
sub_bilingual .save (args .OUTPUT_BILINGUAL )
79
56
0 commit comments