LoginSignup
0
0

More than 3 years have passed since last update.

Programo, kiu ĉerpas subtitolojn de Jutubo skribitaj en python.

Last updated at Posted at 2021-02-03

Programo, kiu ĉerpas subtitolojn de Jutubo skribitaj en python.

日本語 / ENGLISH

qr-code (5).png
La URL de ĉi tiu paĝo estas kodita

Ekzemple vi volas akiri subtitolon de ĉi tiu YouTube-video

Minecraft 1.7: Modding Tutorial --Episode 1 --Development Environment!*

video_id
video_id = '0ULz-oCUbEg'

Se jes, video_id estas la lastaj 11 signoj.1
youtube.com/watch?v=0ULz-oCUbEg

Se vi skribas kaj specifas ĉi tion en la programo, la subteksta dosiero estos elŝutita de la Youtube-klipo.

Antaŭ ol spekti la filmeton, vi devas antaŭe rigardi la subtitolojn kaj kontroli la enhavon en teksto.

Google Colaboratory La sekva 'youtube-subtitle-trans.ipynb'; pitona programo funkcias per interreta servo nomata Google Colaboratory. Vi devas krei konton por Google colab, sed vi povas uzi ĝin senpage. Ĝi funkciigas pitonan programon en retumilo.
Ĉi tiu programo ankaŭ funkcias en la retumilo.

Kopiu la suban kodon al la "ĉelo" de Google colab, algluu ĝin kaj premu ion kiel la ludbutono maldekstre por ekzekuti la kodon.

YouTube: efektive uzanta

Se vi funkcios ĉi tiujn du kaj la instalado sukcesos, la tria iomete pli longa kodo estas la programo por vidi subtitolojn, kaj ĝi funkcios.

Instalu du programajn modulojn

googletrans==4.0.0-rc1

GoogleColaboratory
pip install googletrans==4.0.0-rc1

youtube_transcript_api

GoogleColaboratory
pip install youtube_transcript_api

Programo por elŝuti subtekstojn

youtube-subtitle-trans.ipynb

youtube-subtitle-trans.ipynb
from youtube_transcript_api import YouTubeTranscriptApi
from googletrans import Translator

video_id = '0ULz-oCUbEg' ## youtube video_id
line =[]
line[:] = YouTubeTranscriptApi.get_transcript(video_id,languages=['en'])

text_list = []
for l in line:
    ##print("text: ", l['text'])
    ##print("start:", l['start'])
    ##print("duration:", l['duration'])

    l['text']=l['text'].strip()
    l['text']=l['text'].rstrip('\n')
    l['text']=l['text'].replace('\n',' ')
    text_list.append(l['text'])
##print(line)    
del line
##print(text_list)
print("@dauuricus")
print("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -")
print("YouTube captions")
print("- - - - - - - - - - - - - - - - - - -  YouTube  - - - - - - - - - - - - - - - - - - -")
print()
print()
line = YouTubeTranscriptApi.list_transcripts(video_id)    

transcript = line.find_transcript(['en'])
##print(transcript.fetch())
for count, dict_obj in enumerate(transcript.fetch()):
    print( count +1, dict_obj['text'] )
print()
print()
print("************************************************************************************")
print()
print("Youtube captions")
print("- - - - - - - - - - - - - - - - - - translated - - - - - - - - - - - - - - - - - - -")
print()
print()
translated = transcript.translate('ja')
for count, dict_obj in enumerate(translated.fetch()):
    print( count+1, dict_obj['text'] )
print()
print("-----------------------------------------------------------------------------------")
print()
#print("google translate API")
#print("- - - - - - - - - - - - - - - - -  googletrans  - - - - - - - - - - - - - - - - - -")
print()
print()
####line_list = []
####for l in text_list:
####    line_list.append(l.replace('\n',' '))
##text_list[:] = [a for a in text_list if a != ' ']
##text_list[:] = [l.replace('\n',' ') for l in text_list]


text_compo = [] ##2 lines to 1 line
i = 0
txt = ''
for count,l in enumerate(text_list):
    if i == 0:
      txt += l
      i = i + 1
      text_compo.append(txt)
    elif i == 1:
      txt += ' ' +l
      text_compo.pop()
      text_compo.append(txt)
      i = 0
      txt = ''

#for count, l in enumerate(text_list):
#    print(count+1,l)
print()
print("************************************************************************************")
print()
#print("google translate API")
#print("- - - - - - - - - - - - - - - - -  translated - - - - - - - - - - - - - - - - - - -")    
print()
print()
translator = Translator()

#for count, l in enumerate(text_list):
#    translated = translator.translate(l, dest='ja')
#    ##print(count+1, l)
#    print(count+1, translated.text)

#num = 50
#obj_num = 1

#for count, l in enumerate(text_list):
#    if count +1 < num:
#        translated = translator.translate(l, dest='ja')
#        #print(count+1, l)
#        print(count+1, translated.text)
#    else:
#        translated = translator.translate(l, dest='ja')
#        print(count+1, translated.text)
#        del translator
#        num = num + 50
#        obj_num = obj_num + 1
#        #print("")
#        #print("--- translator :", obj_num)
#        #print("")
#        translator = Translator()

print()
print("------------------------------------------------------------------------------------")
print()
print("google translate API")
print("- - - - - - - - - - - - - - - - - - 2 lines to 1 - - - - - - - - - - - - - - - - - -")    
print()
print()

for count, l in enumerate(text_compo):
    print(count+1,l)
print()
print("************************************************************************************")
print()
print("google translate API")
print("- - - - - - - - - - - - - - - - - - translated - - - - - - - - - - - - - - - - - - -")    
print()
print()
#for count, l in enumerate(text_compo):
#    translated = translator.translate(l, dest='ja')
#    ##print(count+1, l)
#    print(count+1, translated.text)

num = 30
#obj_num = 1

for count, l in enumerate(text_compo):
    if count +1 < num:
        translated = translator.translate(l, dest='ja')
        #print(count+1, l)
        print(count+1, translated.text)
    else:
        translated = translator.translate(l, dest='ja')
        print(count+1, translated.text)
        del translator
        num = num + 30
        #obj_num = obj_num + 1
        #print("")
        #print("--- translator :", obj_num)
        #print("")
        translator = Translator()

print()
print()
print("************************************************************************************")
print()
print("Thank you.")

Cf. Full comparison
qr-code (4).png

googletrans Listo de subtenataj lingvoj

Ĝi estas por specifi la lingvon de subtekstoj programece.
La hebrea similas al ĉi tiuj du.

  • 'iw':'hebrew'
  • 'he':'hebrew'

En la supra kodo de la programo, ekzistas loko nomata dest = 'ja', 'ja' estas japana, mi pensas, ke se vi ŝanĝos ĉi tion al 'he','hebrew' == hebreo, aŭ 'iw', ĝi estos tradukita en la hebrean.

Ankaŭ estas loko nomata ['en'] en la programo-kodo, ĝi signifas anglan ĉar apriora agordo en la programo-modulo 'googletrans' estas angla, se la originala subtitolo estas angla, ĝi estos tia, kia ĝi estas, se la subtitolo estas en alia lingvo, el la suba listo Elektu la deziratan lingvon kaj ŝanĝu ĝin.

Tamen, ĉe ĉi tiu punkto, la angla kaj la hispana ('es', 'spanish') ŝajnas aldoni subtitolojn aŭtomate, sed subtitoloj en aliaj lingvoj ŝajnas ne funkcii tre bone.

Provizore la originalaj subtekstoj estas en la angla kaj estas tradukitaj al la japana, do ĝi estas de ['en'] al 'ja'.

Do provu python.

Se vi havas longan YouTube-filmeton, Google Translate donos eraron, sed la subtitola traduko montriĝos.
Krome la linio ĝis la fino de la jutuba filmeto montriĝas kiel aro de nombro kaj frazo, do vi povas kontroli ĝis kiom ĝi estis tradukita.

Listo_de_subtenataj_lingvoj
import googletrans

box =[]
for i in range(len(googletrans.LANGUAGES)):
    box.append(googletrans.LANGUAGES.popitem())

box.reverse()

for num,language in enumerate(box):
    print(num,language)
Listo de subtenataj lingvoj
'af': 'afrikaans' 'sq': 'albanian' 'am': 'amharic' 'ar': 'arabic'
'hy': 'armenian' 'az': 'azerbaijani' 'eu': 'basque' 'be': 'belarusian'
'bn': 'bengali' 'bs': 'bosnian' 'bg': 'bulgarian' 'ca': 'catalan'
'ceb': 'cebuano' 'ny': 'chichewa' 'zh-cn': 'chinese (simplified)' 'zh-tw': 'chinese (traditional)'
'co': 'corsican' 'hr': 'croatian' 'cs': 'czech' 'da': 'danish'
'nl': 'dutch' 'en': 'english' 'eo': 'esperanto' 'et': 'estonian'
'fi': 'finnish' 'fr': 'french' 'fy': 'frisian' 'gl': 'galician'
'ka': 'georgian' 'de': 'german' 'el': 'greek' 'gu': 'gujarati'
'ht': 'haitian creole' 'ha': 'hausa' 'haw': 'hawaiian' 'iw': 'hebrew'
'he': 'hebrew' 'hi': 'hindi' 'hmn': 'hmong' 'hu': 'hungarian'
'is': 'icelandic' 'ig': 'igbo' 'id': 'indonesian' 'ga': 'irish'
'it': 'italian' 'ja': 'japanese' 'jw': 'javanese' 'kn': 'kannada'
'kk': 'kazakh' 'km': 'khmer' 'ko': 'korean' 'ku': 'kurdish (kurmanji)'
'ky': 'kyrgyz' 'lo': 'lao' 'la': 'latin' 'lv': 'latvian'
'lt': 'lithuanian' 'lb': 'luxembourgish' 'mk': 'macedonian' mg': 'malagasy'
'ms': 'malay' 'ml': 'malayalam' 'mt': 'maltese' 'mi': 'maori'
'mr': 'marathi' 'mn': 'mongolian' 'my': 'myanmar (burmese)' 'ne': 'nepali'
'no': 'norwegian' 'or': 'odia' 'ps': 'pashto' 'fa': 'persian'
'pl': 'polish' 'pt': 'portuguese' 'pa': 'punjabi' 'ro': 'romanian'
'ru': 'russian' 'sm': 'samoan' 'gd': 'scots gaelic' 'sr': 'serbian'
'st': 'sesotho' 'sn': 'shona' 'sd': 'sindhi' 'si': 'sinhala'
'sk': 'slovak' 'sl': 'slovenian' 'so': 'somali' 'es': 'spanish'
'su': 'sundanese' 'sw': 'swahili' 'sv': 'swedish' 'tg': 'tajik'
'ta': 'tamil' 'te': 'telugu' 'th': 'thai' 'tr': 'turkish'
'uk': 'ukrainian' 'ur': 'urdu' 'ug': 'uyghur' 'uz': 'uzbek'
'vi': 'vietnamese' 'cy': 'welsh' 'xh': 'xhosa' 'yi': 'yiddish'
'yo': 'yoruba'a 'zu': 'zulu'
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0