Skip to content

Instantly share code, notes, and snippets.

@jney
Created March 28, 2011 20:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save jney/891218 to your computer and use it in GitHub Desktop.
Save jney/891218 to your computer and use it in GitHub Desktop.
translate a srt file with google translate
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys,json,urllib
from pysrt import SubRipFile, SubRipItem
url_string = 'http://ajax.googleapis.com/ajax/services/language/'
def detect(text):
query = dict(v='1.0', q=text)
file = urllib.urlopen(url_string+'detect?%s' % urllib.urlencode(query))
result = json.loads(file.read())
return result['responseData']['language'] if result['responseData'] else None
def translate(text, input_language, output_language):
source = detect(text)
target = [input_language, output_language][source == input_language]
query = dict(v='1.0', q=text,langpair = '%s|%s' % (source, target))
file = urllib.urlopen(url_string+'translate?%s' % urllib.urlencode(query))
result = json.loads(file.read())
return result['responseData']['translatedText'] if result['responseData'] else None
def translate_srt_file(input_file, output_file, input_language, output_language):
"""translate a srt file from a language to another"""
print 'processing file', input_file
subs = SubRipFile.open(input_file)
for sentence in subs:
sentence.text = translate(sentence.text, input_language, output_language) + '\n'
subs.save(output_file, 'utf-8')
def main():
if len(sys.argv) < 4:
info = '''
translate a subtitle file from a language to another.
Most of the code to use google translate API was taken there :
https://github.com/zhendi/google-translate-cli
usage:
translate-srt.py input_file output_file input_language output_language
example:
translate-srt.py ./titanic-en.srt ./titanic-fr.srt en fr
'''
print info
else:
translate_srt_file(*sys.argv[-4:])
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment