If I have 6 mp4 files, how could I make a video where 5 of those mp4 files play one after each other, with a 0.5 second transparent transition between each video, all on top of the other (the 6th) mp4 file? (Check the video attached below to get an idea of what I'm talking about, but the video was made in a different and worse way)
Currently, I have code that concatenates the 5 into one video, and then puts that video onto the 6th video. But the problem is then the transition between videos isn't transparent, and there are black bars on top and bottom of all of the smaller concatenated videos.
Does anyone know how I could solve this problem? It doesn't have to be solved the way I think it could be; my end goal is just to have transparent transitions between the clips and no thick black bars anywhere. Any help is greatly appreciated, thank you.
The video my current code makes: https://www.youtube.com/watch?v=_Pe3EVDQV74
My code:
from ctypes import resize
from time import sleep
from os import chdir
from os import walk
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import NoSuchElementException
from gtts import gTTS
from moviepy.editor import *
from getStockFootage import getStockFootage
from selenium.webdriver.common.action_chains import ActionChains
#Get the audio files
myAudioFiles = next(walk(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\topicAndCommentsAudio'), (None, None, []))[2]
audioClips = []
#Get the picture files
myImageFiles = next(walk(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\topicAndCommentsPictures'), (None, None, []))[2]
imageClips = []
#Put all audio clips into a list
chdir(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\topicAndCommentsAudio')
for audioNumber in range(len(myAudioFiles)):
audioClips.append(AudioFileClip(myAudioFiles[audioNumber]))
#Put all image clips into a list
chdir(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\topicAndCommentsPictures')
for imageNumber in range(len(myImageFiles)):
imageClips.append(ImageClip(myImageFiles[imageNumber], transparent=True))
#Make a bunch of small videos with the audio and image
chdir(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\redditVideo')
for videoNumber in range(len(imageClips)):
sleep(0.5)
if videoNumber == (len(imageClips)-1):
video = imageClips[videoNumber].set_audio(audioClips[videoNumber])
video.duration = audioClips[videoNumber].duration
video.write_videofile('aTopicText.mp4', fps = 30)
else:
video = imageClips[videoNumber].set_audio(audioClips[videoNumber])
video.duration = audioClips[videoNumber].duration
video.write_videofile('comment'+str(videoNumber+1)+'.mp4', fps = 30)
#Get a stock video (.mp4) for the video and puts the video into C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\redditVideo\stockFootage
sleep(2)
getStockFootage(driver)
#Merge all the smaller videos into one large one
chdir(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\redditVideo')
myVideoFiles = next(walk(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\redditVideo'), (None, None, []))[2]
for counter16 in range(len(myVideoFiles)):
if '.mp4' not in myVideoFiles[counter16]:
myVideoFiles.remove(myVideoFiles[counter16])
videoClips = []
for videoNumber in range(len(myVideoFiles)):
videoClips.append(VideoFileClip(myVideoFiles[videoNumber]))
#Make video of comments
sleep(3)
mergedVideos = concatenate_videoclips(videoClips, method='compose', bg_color=None, padding=0.5)
mergedVideos.write_videofile('mergedVideo.mp4', fps = 30)
mergedVideos.close()
#The comment video
commentVideo = VideoFileClip('mergedVideo.mp4')
commentVideo = commentVideo.resize(height=360)
commentVideo = commentVideo.set_position(("center"))
#Delete used files (let's keep the workplace clean)
# sleep(3)
# for counter17 in range(len(myVideoFiles)):
# os.remove(myVideoFiles[counter17])
sleep(3)
#Get stock footage and make into video
chdir(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\redditVideo\stockFootage')
myStockFootage = next(walk(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\redditVideo\stockFootage'), (None, None, []))[2]
stockFootage = VideoFileClip(myStockFootage[0], target_resolution=(1080, 1920), audio=False)
stockFootage = stockFootage.loop(duration = mergedVideos.duration)
stockFootage.write_videofile('loopedStock.mp4', fps = 30)
stockFootage.close()
os.remove(myStockFootage[0])
#Get looped video
loopedVideo = VideoFileClip('loopedStock.mp4', target_resolution=(1080, 1920), audio=False)
#Put commentVideo onto stockFootage
chdir(r'C:\Users\jack_l\Documents\REDDIT_TO_YOUTUBE_PYTHON_SELENIUM\redditVideo\finalVideo')
finalVideo = CompositeVideoClip([loopedVideo, commentVideo])
finalVideo.write_videofile('finalVideo.mp4', fps=30)
print('Finished')