File size: 2,914 Bytes
638be90
6e941de
638be90
3b83cb7
d2639f0
e129c20
 
 
d2639f0
ae41ebd
 
 
 
d2639f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae41ebd
8078e71
 
 
 
 
 
 
e5be212
 
 
 
 
d2639f0
 
 
ae41ebd
d2639f0
 
 
 
 
 
 
e5be212
e129c20
638be90
d834007
638be90
d834007
 
 
2fd9b5b
 
638be90
ae41ebd
e129c20
d834007
e129c20
 
 
 
 
 
e0aae73
ae41ebd
e129c20
638be90
 
 
 
 
 
 
 
 
 
 
 
ae41ebd
0c9ce61
638be90
 
 
 
 
 
 
 
ae41ebd
638be90
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import gradio as gr

from pytube import YouTube
import random
import requests,json





def create(prompt,openai_key):
  
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {openai_key}',
       
    }
    data =   {
        "model": "text-davinci-003",
        "prompt": prompt,
        "temperature": 0.7,
        "max_tokens": 1024,
        "top_p": 1.0,
        "frequency_penalty": 0.0,
        "presence_penalty": 0.0
    }
    url = 'https://api.openai.com/v1/completions'
    r = requests.post(url,headers=headers,
            data=json.dumps(data))
    return r.json()


def convert(res,openai_key):
    headers = {
        'accept': 'application/json',
        'x-gladia-key': '89b0adf5-fb2c-48ba-8a66-76b02827fd14',
        # requests won't add a boundary if this header is set when you pass files=
        # 'Content-Type': 'multipart/form-data',
    }

    data = res.json()
    prediction = data['prediction']
    content = []
    for x in prediction:
        content.append(x['transcription'])
    auido_txt = '\n'.join(content)

    prompt = f"将下面的内容,总结10条要点出来,\n{auido_txt}"
    open_ai_res = create(prompt,openai_key)
    answer = open_ai_res['choices'][0]['text']

    res_content = f'音频内容:\n{auido_txt}\nGPT3总结的要点:\n{answer}'

    return res_content

    
        

def get_audio(url):
    
    yt = YouTube(url)
    audio_file = f'{random.randint(10000,100000)}.mp4'
    print(f'{url} {audio_file} start get audio ...')
    yt.streams.filter(only_audio=True)[0].download(filename=audio_file)
    print('aodio over ..')
    return audio_file

def get_transcript(url,openai_key):
    audio_file = get_audio(url)
    # audio_file = 'tmp.mp4'
    files = {
        'audio': (f"{audio_file}", open(f'{audio_file}', 'rb'), 'video/mp4'),
        'language': (None, 'english'),
        'language_behaviour': (None, 'automatic single language'),
    }
    response = requests.post('https://api.gladia.io/audio/text/audio-transcription/', headers=headers, files=files)
    print(response.text)
    return convert(response,openai_key)
    




with gr.Blocks() as demo:

    with gr.Row():

        with gr.Column():

            with gr.Row():
                url = gr.Textbox(placeholder='Youtube video URL', label='URL')
                openai_key = gr.Textbox(placeholder='Your openai key', label='key')
               

            with gr.Row():
                gr.Markdown("Larger models are more accurate, but slower. For 1min video, it'll take ~30s (tiny), ~1min (base), ~3min (small), ~5min (medium), etc.")
                transcribe_btn = gr.Button('Transcribe')

        with gr.Column():
            outputs = gr.Textbox(placeholder='Transcription of the video', label='Transcription')

    transcribe_btn.click(get_transcript, inputs=[url,openai_key], outputs=outputs)

demo.launch(debug=True)