I am trying to create a python script that will produce the type of cartoon TikToks with the satisfying video on the bottom part. I am still getting a bunch of errors like "ffmpeg has no attribute "metadata", or some other atribute that is missing"
import os
import random
import hashlib
from moviepy.editor import *
# Function to get MD5 hash of a file
def get_md5_hash(file_path):
with open(file_path, "rb") as f:
bytes = f.read()
hash = hashlib.md5(bytes)
return hash.hexdigest()
# Input video file path
input_file_path = "C:/Users/Kris/output_movies/Bojack.Horseman.S01E01.720p.WEBRip.x264-W4F_1.mp4"
# Re-render the video
video = VideoFileClip(input_file_path)
video.write_videofile("re_rendered_video.mp4", codec='libx264')
# Change MD5 hash
new_md5_hash = get_md5_hash("re_rendered_video.mp4")
os.rename("re_rendered_video.mp4", f"{new_md5_hash}.mp4")
# Clear ID3 tag metadata
video = VideoFileClip(f"{new_md5_hash}.mp4")
video.reader.metadata.clear()
video.reader.close()
# Choose random video from folder and combine with input video
random_video_path = random.choice(os.listdir("C:/Users/Kris/satisfying_vids"))
random_video = VideoFileClip(f"C:/Users/Kris/satisfying_vids/{random_video_path}")
# Ensure the bottom video is at least as long as the input video
while random_video.duration < video.duration:
if random_video.duration * 2 <= video.duration:
random_video = concatenate_videoclips([random_video, random_video])
else:
duration_diff = video.duration - random_video.duration
looped_video = random_video.subclip(0, duration_diff)
random_video = concatenate_videoclips([random_video, looped_video])
# If the concatenated video exceeds the length of the input video, trim it
if random_video.duration > video.duration:
random_video = random_video.subclip(0, video.duration)
# Resize the bottom video to match the input video resolution
random_video_resized = random_video.resize((960, 540))
# Combine the videos in 1:1 aspect ratio with the bottom video at the bottom of the screen
final_video = clips_array([[video], [random_video_resized]])
# Save the final video with .mp4 format
final_video.write_videofile(f"{new_md5_hash}_combined.mp4", codec='libx264')
# Increase brightness and contrast
final_video = VideoFileClip(f"{new_md5_hash}_combined.mp4")
final_video = final_video.fx(vfx.colorx, 0, [random.uniform(-0.2, 0.2), random.uniform(-1, 1)])
final_video.write_videofile(f"{new_md5_hash}_processed.mp4", codec='libx264')
# Color one pixel black and crop one pixel from bottom right corner
final_video = VideoFileClip(f"{new_md5_hash}_processed.mp4")
final_video = final_video.fx(vfx.painting, paint_color=[0,0,0], width=1, height=1, x=0, y=0)
final_video = final_video.crop(x1=0, y1=0, x2=final_video.w-1, y2=final_video.h-1)
final_video.write_videofile(f"{new_md5_hash}_final.mp4", codec='libx264')
the goal for the code is:
Takes an .mp4 file as input (the file is 1920 x 1080 in terms of resolution)
Re-renders the video
Changes the MD5 Hash
Clears ID3 Tag Metadata
Choses another random video from a folder, that is 1920 x 1080 pixels in terms of resolution - combine the chosen video with the input video in 1:1 aspect ratio. Put the video that is randomly chosen from the folder on bottom side of the screen.
Increase the video’s brightness by random number ranging from -0.2 to 0.2
Increase contrast by random number ranging from -1 to 1
Color one pixel black
Crop 1 pixel from the down right angle
Save the final video with .mp4 format
This is the error I am getting when running my code : AttributeError: 'FFMPEG_VideoReader' object has no attribute 'metadata'
Along with various missing attributes.