Spaces:
Sleeping
Sleeping
Eyuvaraj
commited on
Commit
·
2266c59
1
Parent(s):
2817fcf
heygen api video gen, dynamic clipping
Browse files- app.py +2 -2
- dev.ipynb +225 -0
- output.mp4 +0 -0
- trimmed_clips/0_cut.mp4 +0 -0
- trimmed_clips/100000_cut.mp4 +0 -0
- trimmed_clips/1000_cut.mp4 +0 -0
- trimmed_clips/100_cut.mp4 +0 -0
- trimmed_clips/10_cut.mp4 +0 -0
- trimmed_clips/11_cut.mp4 +0 -0
- trimmed_clips/12_cut.mp4 +0 -0
- trimmed_clips/13_cut.mp4 +0 -0
- trimmed_clips/14_cut.mp4 +0 -0
- trimmed_clips/15_cut.mp4 +0 -0
- trimmed_clips/16_cut.mp4 +0 -0
- trimmed_clips/17_cut.mp4 +0 -0
- trimmed_clips/18_cut.mp4 +0 -0
- trimmed_clips/19_cut.mp4 +0 -0
- trimmed_clips/1_cut.mp4 +0 -0
- trimmed_clips/20_cut.mp4 +0 -0
- trimmed_clips/2_cut.mp4 +0 -0
- trimmed_clips/30_cut.mp4 +0 -0
- trimmed_clips/3_cut.mp4 +0 -0
- trimmed_clips/40_cut.mp4 +0 -0
- trimmed_clips/4_cut.mp4 +0 -0
- trimmed_clips/50_cut.mp4 +0 -0
- trimmed_clips/5_cut.mp4 +0 -0
- trimmed_clips/60_cut.mp4 +0 -0
- trimmed_clips/6_cut.mp4 +0 -0
- trimmed_clips/70_cut.mp4 +0 -0
- trimmed_clips/7_cut.mp4 +0 -0
- trimmed_clips/80_cut.mp4 +0 -0
- trimmed_clips/8_cut.mp4 +0 -0
- trimmed_clips/90_cut.mp4 +0 -0
- trimmed_clips/9_cut.mp4 +0 -0
- trimmed_clips/Conclusion_cut.mp4 +0 -0
- trimmed_clips/Intro_cut.mp4 +0 -0
- utils.py +1 -1
app.py
CHANGED
@@ -48,8 +48,8 @@ if number:
|
|
48 |
# print(trim_bounds)
|
49 |
# trim_settings.append(trim_bounds)
|
50 |
|
51 |
-
trim_start = st.slider(f"Trim start for {clip}", 0.0, length, 0.
|
52 |
-
trim_end = st.slider(f"Trim end for {clip}", 0.0, length, 0.
|
53 |
trim_settings.append((trim_start, trim_end))
|
54 |
print(trim_settings)
|
55 |
|
|
|
48 |
# print(trim_bounds)
|
49 |
# trim_settings.append(trim_bounds)
|
50 |
|
51 |
+
trim_start = st.slider(f"Trim start for {clip}", 0.0, length, 0.00, 0.01, key=f"start_{i}")
|
52 |
+
trim_end = st.slider(f"Trim end for {clip}", 0.0, length, 0.00, 0.01, key=f"end_{i}")
|
53 |
trim_settings.append((trim_start, trim_end))
|
54 |
print(trim_settings)
|
55 |
|
dev.ipynb
CHANGED
@@ -205,6 +205,231 @@
|
|
205 |
"# Trim first 1 second and last 2 seconds\n",
|
206 |
"trimmed_clips = trim_clips(clips, 0.3, 0.3)\n"
|
207 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
}
|
209 |
],
|
210 |
"metadata": {
|
|
|
205 |
"# Trim first 1 second and last 2 seconds\n",
|
206 |
"trimmed_clips = trim_clips(clips, 0.3, 0.3)\n"
|
207 |
]
|
208 |
+
},
|
209 |
+
{
|
210 |
+
"cell_type": "code",
|
211 |
+
"execution_count": 6,
|
212 |
+
"metadata": {},
|
213 |
+
"outputs": [],
|
214 |
+
"source": [
|
215 |
+
"payload = {\n",
|
216 |
+
" \"title\": \"Sample Avatar Video\",\n",
|
217 |
+
" \"caption\": False,\n",
|
218 |
+
" \"callback_id\": \"your_custom_id_123\",\n",
|
219 |
+
" \"dimension\": {\n",
|
220 |
+
" \"width\": 1280,\n",
|
221 |
+
" \"height\": 720\n",
|
222 |
+
" },\n",
|
223 |
+
" \"video_inputs\": [\n",
|
224 |
+
" {\n",
|
225 |
+
" \"character\": {\n",
|
226 |
+
" \"type\": \"avatar\",\n",
|
227 |
+
" \"avatar_id\": \"Leos_sitting_sofa_front\",\n",
|
228 |
+
" \"scale\": 1.0,\n",
|
229 |
+
" \"avatar_style\": \"normal\",\n",
|
230 |
+
" \"offset\": {\n",
|
231 |
+
" \"x\": 0.0,\n",
|
232 |
+
" \"y\": 0.0\n",
|
233 |
+
" },\n",
|
234 |
+
" \"matting\": False\n",
|
235 |
+
" },\n",
|
236 |
+
" \"voice\": {\n",
|
237 |
+
" \"type\": \"audio\",\n",
|
238 |
+
" \"audio_url\": \"https://drive.google.com/file/d/1CF8TjWwPWiIPJX3D1bjpMopinHt4iw1D/view?usp=sharing\"\n",
|
239 |
+
" },\n",
|
240 |
+
" }\n",
|
241 |
+
" ],\n",
|
242 |
+
" \"callback_url\": \"https://your-callback-url.com\"\n",
|
243 |
+
"}"
|
244 |
+
]
|
245 |
+
},
|
246 |
+
{
|
247 |
+
"cell_type": "code",
|
248 |
+
"execution_count": 7,
|
249 |
+
"metadata": {},
|
250 |
+
"outputs": [
|
251 |
+
{
|
252 |
+
"name": "stdout",
|
253 |
+
"output_type": "stream",
|
254 |
+
"text": [
|
255 |
+
"{\"error\": null, \"data\": {\"video_id\": \"e45ea4bfb773464a9c96187a44263c37\"}}\n"
|
256 |
+
]
|
257 |
+
}
|
258 |
+
],
|
259 |
+
"source": [
|
260 |
+
"import requests\n",
|
261 |
+
"\n",
|
262 |
+
"url = \"https://api.heygen.com/v2/video/generate\"\n",
|
263 |
+
"\n",
|
264 |
+
"\n",
|
265 |
+
"headers = {\n",
|
266 |
+
" \"accept\": \"application/json\",\n",
|
267 |
+
" \"content-type\": \"application/json\",\n",
|
268 |
+
" \"x-api-key\": \"YTBjYzk5MjI1ZWQzNGViOTgxMTI0NjM2OGQ5NDc2OGEtMTczMzk5MjA5MA==\"\n",
|
269 |
+
"}\n",
|
270 |
+
"\n",
|
271 |
+
"response = requests.post(url, json=payload, headers=headers)\n",
|
272 |
+
"\n",
|
273 |
+
"print(response.text)\n",
|
274 |
+
"\n",
|
275 |
+
"\n"
|
276 |
+
]
|
277 |
+
},
|
278 |
+
{
|
279 |
+
"cell_type": "code",
|
280 |
+
"execution_count": 26,
|
281 |
+
"metadata": {},
|
282 |
+
"outputs": [],
|
283 |
+
"source": [
|
284 |
+
"url = \"https://api.heygen.com/v1/video_status.get\"\n",
|
285 |
+
"\n",
|
286 |
+
"headers = {\n",
|
287 |
+
" \"accept\": \"application/json\",\n",
|
288 |
+
" \"x-api-key\": \"YTBjYzk5MjI1ZWQzNGViOTgxMTI0NjM2OGQ5NDc2OGEtMTczMzk5MjA5MA==\"\n",
|
289 |
+
"}\n",
|
290 |
+
"\n",
|
291 |
+
"\n",
|
292 |
+
"response = requests.get(url, headers=headers, params={\"video_id\": \"e45ea4bfb773464a9c96187a44263c37\"}).json()"
|
293 |
+
]
|
294 |
+
},
|
295 |
+
{
|
296 |
+
"cell_type": "code",
|
297 |
+
"execution_count": 29,
|
298 |
+
"metadata": {},
|
299 |
+
"outputs": [
|
300 |
+
{
|
301 |
+
"data": {
|
302 |
+
"text/plain": [
|
303 |
+
"{'code': 100,\n",
|
304 |
+
" 'data': {'callback_id': 'your_custom_id_123',\n",
|
305 |
+
" 'caption_url': '',\n",
|
306 |
+
" 'created_at': 1736190876,\n",
|
307 |
+
" 'duration': 23.458,\n",
|
308 |
+
" 'error': None,\n",
|
309 |
+
" 'gif_url': 'https://resource2.heygen.ai/video/gifs/e45ea4bfb773464a9c96187a44263c37.gif',\n",
|
310 |
+
" 'id': 'e45ea4bfb773464a9c96187a44263c37',\n",
|
311 |
+
" 'status': 'completed',\n",
|
312 |
+
" 'thumbnail_url': 'https://files2.heygen.ai/aws_pacific/avatar_tmp/a0cc99225ed34eb9811246368d94768a/e45ea4bfb773464a9c96187a44263c37.jpeg?Expires=1736796787&Signature=hx6utjHJZT2FzxXurir~891Yn5-zU86rmDiFVC-cUPTaZ0bCSEvEkpeZQHFQwuZ2gJncl3g7ggg7~egIi1VlW3tWewJGPQUVqcEgFSGngCLOcUs5hYAozAWYqR1ivGvjnQLjxjrwH5eWHxs4uV1g~vQ7v64Sd3plwvJWc0AsOVYKpNpE4lbdpdogrBoRF-~3w0aegYdpCexyIInFWv1VRUDc3xd7OW~hLEEhK6FMXb~3NMk~590IfLne3aztcwQRzc8gVx~PySOrJGFs18FXzGgBCP9aMt0dNW7xxFJIfL9O2aB06AVBrB2kPmrRM0Q~1faXHUFehqHn1P8PA~19NA__&Key-Pair-Id=K38HBHX5LX3X2H',\n",
|
313 |
+
" 'video_url': 'https://files2.heygen.ai/aws_pacific/avatar_tmp/a0cc99225ed34eb9811246368d94768a/e45ea4bfb773464a9c96187a44263c37.mp4?Expires=1736795934&Signature=KIzp-KtTCs1Ida7IB2GKgqikgTISq1W0yFZK04cP54z6rUlCrM7882UYrhzJxOjZAZoRDFPKZ07c-eKvGhlk1AKeyKr05Vu7338xfPZRUTKd43cpDi4QS9uyfELcu0UctjoAZwtwwJl7vANFZKCekElbUnWfruYW~k6PMrhtjkb9kWwvdlAFoBgu3agRsqVha9O8fTdwaKYyv1UUUS0TIdWwsa6sLM5ssB917ifUOXc25bPLFwoFp3i1ZotIDldeLpq2dPUPHOH-1ApXwuclGLyUIf-M9VILmit35yl3g-cAtw3cvT-1pJiiJLmLofksELpMsBKDpJDSkVq6jCyxFg__&Key-Pair-Id=K38HBHX5LX3X2H',\n",
|
314 |
+
" 'video_url_caption': None},\n",
|
315 |
+
" 'message': 'Success'}"
|
316 |
+
]
|
317 |
+
},
|
318 |
+
"execution_count": 29,
|
319 |
+
"metadata": {},
|
320 |
+
"output_type": "execute_result"
|
321 |
+
}
|
322 |
+
],
|
323 |
+
"source": [
|
324 |
+
"response"
|
325 |
+
]
|
326 |
+
},
|
327 |
+
{
|
328 |
+
"cell_type": "code",
|
329 |
+
"execution_count": 33,
|
330 |
+
"metadata": {},
|
331 |
+
"outputs": [
|
332 |
+
{
|
333 |
+
"data": {
|
334 |
+
"text/plain": [
|
335 |
+
"100"
|
336 |
+
]
|
337 |
+
},
|
338 |
+
"execution_count": 33,
|
339 |
+
"metadata": {},
|
340 |
+
"output_type": "execute_result"
|
341 |
+
}
|
342 |
+
],
|
343 |
+
"source": [
|
344 |
+
"response[\"code\"]"
|
345 |
+
]
|
346 |
+
},
|
347 |
+
{
|
348 |
+
"cell_type": "code",
|
349 |
+
"execution_count": 34,
|
350 |
+
"metadata": {},
|
351 |
+
"outputs": [],
|
352 |
+
"source": [
|
353 |
+
"video_url = response.get(\"data\").get(\"video_url\")"
|
354 |
+
]
|
355 |
+
},
|
356 |
+
{
|
357 |
+
"cell_type": "code",
|
358 |
+
"execution_count": 36,
|
359 |
+
"metadata": {},
|
360 |
+
"outputs": [],
|
361 |
+
"source": [
|
362 |
+
"downloaded_video = requests.get(video_url)\n",
|
363 |
+
"\n",
|
364 |
+
"# save the video to a file\n",
|
365 |
+
"with open(\"UPIBOT.mp4\", \"wb\") as f:\n",
|
366 |
+
" f.write(downloaded_video.content)\n"
|
367 |
+
]
|
368 |
+
},
|
369 |
+
{
|
370 |
+
"cell_type": "code",
|
371 |
+
"execution_count": null,
|
372 |
+
"metadata": {},
|
373 |
+
"outputs": [],
|
374 |
+
"source": [
|
375 |
+
"\n",
|
376 |
+
"import json\n",
|
377 |
+
"from moviepy.editor import VideoFileClip\n",
|
378 |
+
"\n",
|
379 |
+
"# Load the clips metadata\n",
|
380 |
+
"with open(\"clips_metadata.json\", \"r\") as f:\n",
|
381 |
+
" clips_metadata = json.load(f)\n",
|
382 |
+
"\n",
|
383 |
+
"# Load the downloaded video\n",
|
384 |
+
"video = VideoFileClip(\"UPIBOT.mp4\")\n",
|
385 |
+
"\n",
|
386 |
+
"\n",
|
387 |
+
"# use that video to generate short clips from using timestamps mentioned in clips_metadata\n",
|
388 |
+
"clips = []\n",
|
389 |
+
"for clip_data in clips_metadata:\n",
|
390 |
+
" start_time = clip_data[\"start_time_ms\"]\n",
|
391 |
+
" end_time = clip_data[\"end_time_ms\"]\n",
|
392 |
+
"\n",
|
393 |
+
" # convert milliseconds to seconds\n",
|
394 |
+
" start_time /= 1000\n",
|
395 |
+
" end_time /= 1000\n",
|
396 |
+
"\n",
|
397 |
+
" try:\n",
|
398 |
+
" clip_name = clip_data[\"file_name\"].split(\".\")[0]+\".mp4\"\n",
|
399 |
+
" clip = video.subclip(start_time, end_time)\n",
|
400 |
+
" clips.append(clip)\n",
|
401 |
+
" except Exception as e:\n",
|
402 |
+
" print(f\"Error in clip {clip_name}: {e}\")\n",
|
403 |
+
"\n",
|
404 |
+
"# save the clips to a dir\n",
|
405 |
+
"\n",
|
406 |
+
"import os\n",
|
407 |
+
"clips_dir = \"clips\"\n",
|
408 |
+
"os.makedirs(clips_dir, exist_ok=True)\n",
|
409 |
+
"\n",
|
410 |
+
"for i, clip in enumerate(clips):\n",
|
411 |
+
" clip_path = os.path.join(clips_dir, clips_metadata[i][\"file_name\"].split(\".\")[0]+\".mp4\")\n",
|
412 |
+
" clip.write_videofile(clip_path, codec=\"libx264\", audio_codec=\"aac\")"
|
413 |
+
]
|
414 |
+
},
|
415 |
+
{
|
416 |
+
"cell_type": "code",
|
417 |
+
"execution_count": null,
|
418 |
+
"metadata": {},
|
419 |
+
"outputs": [],
|
420 |
+
"source": [
|
421 |
+
"import json\n",
|
422 |
+
"with open(\"clips_metadata.json\", \"r\") as f:\n",
|
423 |
+
" clips_metadata = json.load(f)\n",
|
424 |
+
"\n",
|
425 |
+
"for item in clips_metadata:\n",
|
426 |
+
" item[\"start_time_ms\"]=item[\"start_time_ms\"]-40\n",
|
427 |
+
" item[\"end_time_ms\"]=item[\"end_time_ms\"]+40\n",
|
428 |
+
"\n",
|
429 |
+
"# update the file with new timestamps\n",
|
430 |
+
"with open(\"clips_metadata.json\", \"w\") as f:\n",
|
431 |
+
" json.dump(clips_metadata, f, indent=4)"
|
432 |
+
]
|
433 |
}
|
434 |
],
|
435 |
"metadata": {
|
output.mp4
CHANGED
Binary files a/output.mp4 and b/output.mp4 differ
|
|
trimmed_clips/0_cut.mp4
DELETED
Binary file (164 kB)
|
|
trimmed_clips/100000_cut.mp4
CHANGED
Binary files a/trimmed_clips/100000_cut.mp4 and b/trimmed_clips/100000_cut.mp4 differ
|
|
trimmed_clips/1000_cut.mp4
CHANGED
Binary files a/trimmed_clips/1000_cut.mp4 and b/trimmed_clips/1000_cut.mp4 differ
|
|
trimmed_clips/100_cut.mp4
CHANGED
Binary files a/trimmed_clips/100_cut.mp4 and b/trimmed_clips/100_cut.mp4 differ
|
|
trimmed_clips/10_cut.mp4
CHANGED
Binary files a/trimmed_clips/10_cut.mp4 and b/trimmed_clips/10_cut.mp4 differ
|
|
trimmed_clips/11_cut.mp4
CHANGED
Binary files a/trimmed_clips/11_cut.mp4 and b/trimmed_clips/11_cut.mp4 differ
|
|
trimmed_clips/12_cut.mp4
CHANGED
Binary files a/trimmed_clips/12_cut.mp4 and b/trimmed_clips/12_cut.mp4 differ
|
|
trimmed_clips/13_cut.mp4
CHANGED
Binary files a/trimmed_clips/13_cut.mp4 and b/trimmed_clips/13_cut.mp4 differ
|
|
trimmed_clips/14_cut.mp4
CHANGED
Binary files a/trimmed_clips/14_cut.mp4 and b/trimmed_clips/14_cut.mp4 differ
|
|
trimmed_clips/15_cut.mp4
CHANGED
Binary files a/trimmed_clips/15_cut.mp4 and b/trimmed_clips/15_cut.mp4 differ
|
|
trimmed_clips/16_cut.mp4
CHANGED
Binary files a/trimmed_clips/16_cut.mp4 and b/trimmed_clips/16_cut.mp4 differ
|
|
trimmed_clips/17_cut.mp4
CHANGED
Binary files a/trimmed_clips/17_cut.mp4 and b/trimmed_clips/17_cut.mp4 differ
|
|
trimmed_clips/18_cut.mp4
CHANGED
Binary files a/trimmed_clips/18_cut.mp4 and b/trimmed_clips/18_cut.mp4 differ
|
|
trimmed_clips/19_cut.mp4
CHANGED
Binary files a/trimmed_clips/19_cut.mp4 and b/trimmed_clips/19_cut.mp4 differ
|
|
trimmed_clips/1_cut.mp4
CHANGED
Binary files a/trimmed_clips/1_cut.mp4 and b/trimmed_clips/1_cut.mp4 differ
|
|
trimmed_clips/20_cut.mp4
CHANGED
Binary files a/trimmed_clips/20_cut.mp4 and b/trimmed_clips/20_cut.mp4 differ
|
|
trimmed_clips/2_cut.mp4
CHANGED
Binary files a/trimmed_clips/2_cut.mp4 and b/trimmed_clips/2_cut.mp4 differ
|
|
trimmed_clips/30_cut.mp4
CHANGED
Binary files a/trimmed_clips/30_cut.mp4 and b/trimmed_clips/30_cut.mp4 differ
|
|
trimmed_clips/3_cut.mp4
CHANGED
Binary files a/trimmed_clips/3_cut.mp4 and b/trimmed_clips/3_cut.mp4 differ
|
|
trimmed_clips/40_cut.mp4
CHANGED
Binary files a/trimmed_clips/40_cut.mp4 and b/trimmed_clips/40_cut.mp4 differ
|
|
trimmed_clips/4_cut.mp4
CHANGED
Binary files a/trimmed_clips/4_cut.mp4 and b/trimmed_clips/4_cut.mp4 differ
|
|
trimmed_clips/50_cut.mp4
CHANGED
Binary files a/trimmed_clips/50_cut.mp4 and b/trimmed_clips/50_cut.mp4 differ
|
|
trimmed_clips/5_cut.mp4
CHANGED
Binary files a/trimmed_clips/5_cut.mp4 and b/trimmed_clips/5_cut.mp4 differ
|
|
trimmed_clips/60_cut.mp4
CHANGED
Binary files a/trimmed_clips/60_cut.mp4 and b/trimmed_clips/60_cut.mp4 differ
|
|
trimmed_clips/6_cut.mp4
CHANGED
Binary files a/trimmed_clips/6_cut.mp4 and b/trimmed_clips/6_cut.mp4 differ
|
|
trimmed_clips/70_cut.mp4
CHANGED
Binary files a/trimmed_clips/70_cut.mp4 and b/trimmed_clips/70_cut.mp4 differ
|
|
trimmed_clips/7_cut.mp4
CHANGED
Binary files a/trimmed_clips/7_cut.mp4 and b/trimmed_clips/7_cut.mp4 differ
|
|
trimmed_clips/80_cut.mp4
CHANGED
Binary files a/trimmed_clips/80_cut.mp4 and b/trimmed_clips/80_cut.mp4 differ
|
|
trimmed_clips/8_cut.mp4
CHANGED
Binary files a/trimmed_clips/8_cut.mp4 and b/trimmed_clips/8_cut.mp4 differ
|
|
trimmed_clips/90_cut.mp4
CHANGED
Binary files a/trimmed_clips/90_cut.mp4 and b/trimmed_clips/90_cut.mp4 differ
|
|
trimmed_clips/9_cut.mp4
CHANGED
Binary files a/trimmed_clips/9_cut.mp4 and b/trimmed_clips/9_cut.mp4 differ
|
|
trimmed_clips/Conclusion_cut.mp4
CHANGED
Binary files a/trimmed_clips/Conclusion_cut.mp4 and b/trimmed_clips/Conclusion_cut.mp4 differ
|
|
trimmed_clips/Intro_cut.mp4
CHANGED
Binary files a/trimmed_clips/Intro_cut.mp4 and b/trimmed_clips/Intro_cut.mp4 differ
|
|
utils.py
CHANGED
@@ -128,7 +128,7 @@ def create_advanced_video(number, trim_settings, output_file="output.mp4"):
|
|
128 |
print(f"Error loading clip {clip_path}: {e}")
|
129 |
|
130 |
clips_to_combine.extend(video_clips)
|
131 |
-
|
132 |
|
133 |
if video_clips:
|
134 |
final_video = concatenate_videoclips(clips_to_combine)
|
|
|
128 |
print(f"Error loading clip {clip_path}: {e}")
|
129 |
|
130 |
clips_to_combine.extend(video_clips)
|
131 |
+
clips_to_combine.append(VideoFileClip(conclusion_file))
|
132 |
|
133 |
if video_clips:
|
134 |
final_video = concatenate_videoclips(clips_to_combine)
|