Spaces:
Build error
Build error
import moviepy | |
from moviepy.editor import concatenate_videoclips | |
from moviepy.video.io.VideoFileClip import VideoFileClip | |
def add_logo(input_clip, output_clip_name, logo_file_name, logo_duration, position=("right", "top")): | |
"""Add logo to the videos to replicate edited videos with logos. | |
Args: | |
input_clip (VideoFileClip): The video to be edited. | |
output_clip_name (str): The file name of where the edited video is to be saved. | |
logo_file_name (str): The name of the logo image to be added. | |
logo_duration (float): The duration in seconds (from the beginning) where the logo will appear on the video. | |
Returns: | |
None. | |
""" | |
logo = (moviepy.ImageClip(logo_file_name) | |
.set_duration(logo_duration) | |
.resize(height=50) # if you need to resize... | |
.margin(right=8, top=8, opacity=0) # (optional) logo-border padding | |
.set_pos(position)) | |
output_clip = moviepy.CompositeVideoClip([input_clip, logo]) | |
output_clip.write_videofile(output_clip_name) | |
def edit_remove_part(input_filename, start_s, end_s): | |
"""Remove a segment of an .mp4 by and change its FPS. Keeps the audio intact by audio_codec='aac' parameter. | |
Args: | |
input_filename (str): The name of the input video to be edited. | |
start_s (float): The start time in seconds of the segment to be removed. | |
end_s (float): The end time in seconds of the segment to be removed. | |
Returns: | |
None. | |
""" | |
input_filename_no_ext, ext = input_filename.split('.') | |
input_video = VideoFileClip(input_filename) | |
# Remove part video and return result | |
video = input_video.cutout(start_s, end_s) | |
# Write Video | |
output_filename = input_filename_no_ext + f"_RM_{start_s}s_to_{end_s}.{ext}" | |
video.write_videofile(output_filename, audio_codec='aac') | |
def edit_change_order(input_filename, start_s, end_s, insert_s): | |
"""Take start_s to end_s out of the video and insert it at insert_s. Keeps the audio intact by audio_codec='aac' parameter. | |
Args: | |
input_filename (str): The name of the input video to be edited. | |
start_s (float): The start time in seconds of the segment to be removed. | |
end_s (float): The end time in seconds of the segment to be removed. | |
insert_s (float): The time in seconds where the removed segment is to be re-added. | |
Returns: | |
None. | |
""" | |
# Load in video | |
input_filename_no_ext, ext = input_filename.split('.') | |
input_video = VideoFileClip(input_filename) | |
# Assert that the insert timestamp is not originally a part of the segment to be removed | |
# And that end_s is greater than start_s | |
assert not (insert_s > start_s and insert_s < end_s), "Insert time can't be in cutout time!" | |
assert (end_s > start_s), "End_s should be higher than start_s!" | |
# Cut out a part and insert it somewhere else | |
if insert_s < start_s and insert_s < end_s: | |
part_start = input_video.subclip(0.0, insert_s) | |
part_cutout = input_video.subclip(start_s, end_s) | |
part_mid = input_video.subclip(insert_s, start_s) | |
part_end = input_video.subclip(end_s, input_video.duration) | |
video = concatenate_videoclips([part_start, part_cutout, part_mid, part_end]) | |
elif insert_s > start_s and insert_s > end_s: | |
part_start = input_video.subclip(0.0, start_s) | |
part_cutout = input_video.subclip(start_s, end_s) | |
part_mid = input_video.subclip(end_s, insert_s) | |
part_end = input_video.subclip(insert_s, input_video.duration) | |
print(f"Part Start = {part_start.duration}, Part Cutout = {part_cutout.duration}, Part Mid = {part_mid.duration}, Part End = {part_end.duration}") | |
video = concatenate_videoclips([part_start, part_mid, part_cutout, part_end]) | |
# Write video location | |
output_filename = input_filename_no_ext + f"_CO_{start_s}s_to_{end_s}_at_{insert_s}.{ext}" | |
video.write_videofile(output_filename, audio_codec='aac') | |