Skip to content

Commit 450ac93

Browse files
authored
Merge pull request #21 from thockx/main
WIP: Extend examples
2 parents f6ad10a + 85c22c9 commit 450ac93

6 files changed

Lines changed: 214 additions & 0 deletions

File tree

examples/file_to_tts.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
### A simple Transloadit Assembly that converts a .doc file to a .txt file. It then generates a .mp3 based on the .txt file using a text-to-speech Robot.
2+
3+
'''
4+
Template:
5+
6+
{
7+
"steps": {
8+
":original": {
9+
"robot": "/upload/handle"
10+
},
11+
"convert": {
12+
"use": ":original",
13+
"robot": "/document/convert",
14+
"format": "txt"
15+
},
16+
"speech": {
17+
"use": "convert",
18+
"robot": "/text/speak",
19+
"result": true,
20+
"provider": "gcp",
21+
"target_language": "en-US",
22+
"voice": "female-1"
23+
}
24+
}
25+
}
26+
'''
27+
28+
from transloadit import client
29+
30+
tl = client.Transloadit('TRANSLOADIT_KEY', 'TRANSLOADIT_SECRET')
31+
32+
def useTemplate(templateID, file_path='', result_name='', get_url=True, fields=''):
33+
assembly = tl.new_assembly({'template_id': templateID, 'fields': fields})
34+
35+
if file_path != '':
36+
assembly.add_file(open(file_path, 'rb'))
37+
38+
assembly_response = assembly.create(retries=5, wait=True)
39+
if get_url:
40+
assembly_url = assembly_response.data.get('results').get(result_name)[0].get('ssl_url')
41+
print(assembly_url)
42+
return assembly_url
43+
44+
useTemplate ('TEMPLATE_ID', file_path='fixtures/document.doc', result_name='speech', get_url=True)

examples/fixtures/crab.mp4

522 KB
Binary file not shown.

examples/fixtures/document.doc

19 KB
Binary file not shown.

examples/image_resize.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
### A simple Transloadit assembly that changes the size of an image.
2+
13
from transloadit.client import Transloadit
24

35
client = Transloadit("TRANSLOADIT_KEY", "TRANSLOADIT_SECRET")

examples/video_translator.py

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
### A Transloadit Assembly that adds a translated TTS-voice (english to dutch) to an input video of hermit crabs.
2+
3+
'''
4+
Template 1:
5+
6+
{
7+
"steps": {
8+
"transcribe_json": {
9+
"use": ":original",
10+
"robot": "/speech/transcribe",
11+
"provider": "aws",
12+
"source_language": "${fields.language}",
13+
"format": "json",
14+
"result": true
15+
}
16+
}
17+
}
18+
'''
19+
20+
'''
21+
Template 2:
22+
23+
{
24+
"steps": {
25+
":original": {
26+
"robot": "/upload/handle"
27+
},
28+
"import_video": {
29+
"robot": "/http/import",
30+
"url": "${fields.video}"
31+
},
32+
"translate": {
33+
"use": ":original",
34+
"robot": "/text/translate",
35+
"provider": "gcp",
36+
"target_language": "${fields.target_language}",
37+
"source_language": "${fields.source_language}",
38+
"result": true
39+
},
40+
"speech": {
41+
"use": "translate",
42+
"robot": "/text/speak",
43+
"provider": "gcp",
44+
"target_language": "${fields.target_language}",
45+
"voice": "female-1",
46+
"ssml": true,
47+
"result": true
48+
},
49+
"extract_audio": {
50+
"use": "import_video",
51+
"robot": "/video/encode",
52+
"result": true,
53+
"preset": "mp3",
54+
"ffmpeg": {
55+
"af": "${fields.ffmpeg}"
56+
},
57+
"ffmpeg_stack": "v3.3.3"
58+
},
59+
"merged_audio": {
60+
"robot": "/audio/merge",
61+
"preset": "mp3",
62+
"result": "true",
63+
"ffmpeg_stack": "v4.3.1",
64+
"use": {
65+
"steps": [
66+
{
67+
"name": "extract_audio",
68+
"as": "audio"
69+
},
70+
{
71+
"name": "speech",
72+
"as": "audio"
73+
}
74+
],
75+
"volume": "sum",
76+
"bundle_steps": true
77+
}
78+
},
79+
"merged_video": {
80+
"robot": "/video/merge",
81+
"preset": "hls-720p",
82+
"ffmpeg_stack": "v4.3.1",
83+
"use": {
84+
"steps": [
85+
{
86+
"name": "merged_audio",
87+
"as": "audio"
88+
},
89+
{
90+
"name": "import_video",
91+
"as": "video"
92+
}
93+
],
94+
"bundle_steps": true
95+
}
96+
}
97+
}
98+
}
99+
'''
100+
101+
from transloadit import client
102+
import urllib.request
103+
import json
104+
105+
tl = client.Transloadit('TRANSLOADIT_KEY', 'TRANSLOADIT_SECRET')
106+
107+
source_language = 'en-GB'
108+
target_language = 'nl-NL'
109+
110+
def useTemplate(templateID, file_path='', result_name='', get_url=True, fields=''):
111+
assembly = tl.new_assembly({'template_id': templateID, 'fields': fields})
112+
113+
if file_path != '':
114+
assembly.add_file(open(file_path, 'rb'))
115+
116+
assembly_response = assembly.create(retries=5, wait=True)
117+
if get_url:
118+
result_url = assembly_response.data.get('results').get(result_name)[0].get('ssl_url')
119+
print(result_url)
120+
return result_url
121+
else:
122+
return assembly_response
123+
124+
response = useTemplate ('TEMPLATE_1_ID', file_path='medium_crab.mp4', get_url=False, fields={"language":source_language})
125+
transcription_result_url = response.data.get('results').get('transcribe_json')[0].get('ssl_url')
126+
video_url = response.data.get('uploads')[0].get('ssl_url')
127+
128+
urllib.request.urlretrieve(transcription_result_url, 'transcribe_json')
129+
130+
with open('transcribe_json') as f:
131+
data = json.load(f)
132+
133+
ffmpeg = "volume=enable:volume=1"
134+
135+
startTimes = []
136+
endTimes = []
137+
sentences = []
138+
currentSentence = ''
139+
140+
startTimes.append(data['words'][0]['startTime'])
141+
142+
for x in range(len(data['words'])):
143+
if (data['words'][x]['text'] == '.') and (x != len(data['words']) - 1):
144+
time = data['words'][x+1]['startTime']
145+
startTimes.append(time)
146+
if (data['words'][x]['text'] != '.'):
147+
currentSentence = currentSentence + ' ' + data['words'][x]['text']
148+
else:
149+
sentences.append(currentSentence + '.')
150+
time = data['words'][x-1]['endTime']
151+
endTimes.append(time)
152+
currentSentence = ''
153+
154+
print('startTimes: ' + str(startTimes))
155+
print('endTimes: ' + str(startTimes))
156+
print(sentences)
157+
158+
f = open("words/text.txt", "w")
159+
f.write("<speak><par>")
160+
161+
for x in range(len(sentences)):
162+
f.write('<media begin="{start}"><speak>{text}</speak></media>'.format(start=startTimes[x], text=sentences[x]))
163+
ffmpeg += ", volume=enable='between(t,{start},{end})':volume=0.2".format(start=startTimes[x], end=endTimes[x])
164+
165+
f.write("</par></speak>")
166+
f.close()
167+
168+
final_result_url = useTemplate ('TEMPLATE_2_ID', file_path='words/text.txt', result_name='merged_video', get_url=True, fields={"target_language":target_language, "source_language":source_language, "video":video_url, "ffmpeg":ffmpeg})

examples/words/text.txt

Whitespace-only changes.

0 commit comments

Comments
 (0)