Commit 9bb0f00970848b97d4f688162819069329433b07

Authored by Wesnydy Ribeiro
1 parent af9913c2

Create watemark function on renderer

Showing 1 changed file with 40 additions and 3 deletions   Show diff stats
core/renderer.py
@@ -12,6 +12,7 @@ Author: Wesnydy Lima Ribeiro @@ -12,6 +12,7 @@ Author: Wesnydy Lima Ribeiro
12 E-Mail: wesnydy@lavid.ufpb.br 12 E-Mail: wesnydy@lavid.ufpb.br
13 """ 13 """
14 14
  15 +import ffmpy
15 import json 16 import json
16 import os 17 import os
17 import pika 18 import pika
@@ -68,7 +69,7 @@ def start_video_creator(id): @@ -68,7 +69,7 @@ def start_video_creator(id):
68 [ 69 [
69 VIDEO_CREATOR, 70 VIDEO_CREATOR,
70 id, 71 id,
71 - "0", 72 + "1",
72 "30", 73 "30",
73 "20", 74 "20",
74 "25", 75 "25",
@@ -92,8 +93,8 @@ def start_ffmpeg(id): @@ -92,8 +93,8 @@ def start_ffmpeg(id):
92 Identification of request. 93 Identification of request.
93 """ 94 """
94 global ffmpeg, display, libras_video 95 global ffmpeg, display, libras_video
95 - # logger.info("Starting ffmpeg")  
96 - libras_video = os.path.join(PATH_LIBRAS, id + ".mp4") 96 + # 'vl.mp4' sufix to distinguish from video with watermark
  97 + libras_video = os.path.join(PATH_LIBRAS, id + "vl.mp4")
97 ffmpeg = subprocess.Popen( 98 ffmpeg = subprocess.Popen(
98 [ 99 [
99 "ffmpeg", 100 "ffmpeg",
@@ -162,11 +163,14 @@ def run(ch, method, properties, body): @@ -162,11 +163,14 @@ def run(ch, method, properties, body):
162 """ 163 """
163 global worker_available 164 global worker_available
164 165
  166 + print ("Rendering...")
165 if worker_available: 167 if worker_available:
166 worker_available = False 168 worker_available = False
167 start_new_thread(send_to_video_creator, (properties.correlation_id, body)) 169 start_new_thread(send_to_video_creator, (properties.correlation_id, body))
168 start_video_creator(properties.correlation_id) 170 start_video_creator(properties.correlation_id)
169 171
  172 + final_video = os.path.join(PATH_LIBRAS, properties.correlation_id+".mp4")
  173 + watermark(libras_video, final_video, "Vídeo gerado automaticamente pelo usuário")
170 try: 174 try:
171 filesize = os.path.getsize(libras_video) 175 filesize = os.path.getsize(libras_video)
172 except: 176 except:
@@ -179,12 +183,45 @@ def run(ch, method, properties, body): @@ -179,12 +183,45 @@ def run(ch, method, properties, body):
179 183
180 clean(properties.correlation_id) 184 clean(properties.correlation_id)
181 worker_available = True 185 worker_available = True
  186 + print ("Ok")
182 else: 187 else:
183 ch.basic_reject(delivery_tag=method.delivery_tag, requeue=True) 188 ch.basic_reject(delivery_tag=method.delivery_tag, requeue=True)
184 189
  190 +# Post processor functions
  191 +def watermark(input_video, output_video, text):
  192 + fontfile = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  193 +
  194 + filter_graph = ','.join(
  195 + [
  196 + "mpdecimate",
  197 + "setpts=N/FRAME_RATE/TB",
  198 + "drawbox=y=ih-208:color=black@0.4:width=iw:height=48:t=max",
  199 + "drawtext=fontfile="+fontfile+":text="+text+":fontcolor=white@0.8:fontsize=36:y=h-200:x=w/10*mod(t\,10)"
  200 + ]
  201 + )
  202 +
  203 + ffmpeg = ffmpy.FFmpeg(
  204 + inputs = { input_video: None },
  205 + outputs = {
  206 + output_video: [
  207 + "-loglevel", "error",
  208 + "-vf", filter_graph,
  209 + "-ss", "0.03",
  210 + "-c:v", "libx264",
  211 + "-movflags", "+faststart",
  212 + "-y"
  213 + ]
  214 + }
  215 + )
  216 + try:
  217 + ffmpeg.run()
  218 + except:
  219 + print "FFmpeg retuned with a non-zero exit code. Watermark error."
  220 +
185 #Temporary 221 #Temporary
186 def clean(id): 222 def clean(id):
187 # logger.info("Cleaning screens files") 223 # logger.info("Cleaning screens files")
  224 + os.remove(libras_video)
188 path = os.path.join(PATH_FRAMES, id) 225 path = os.path.join(PATH_FRAMES, id)
189 rmtree(path, ignore_errors=True) 226 rmtree(path, ignore_errors=True)
190 227