mirror of
				https://github.com/chev2/shitpost-video-generator.git
				synced 2025-10-30 08:12:03 +00:00 
			
		
		
		
	Add video effects toggle, change random clip duration
This commit is contained in:
		
							parent
							
								
									03ba7427de
								
							
						
					
					
						commit
						0cef20d304
					
				
					 2 changed files with 12 additions and 4 deletions
				
			
		|  | @ -15,7 +15,7 @@ Here's how it works: | ||||||
| 1. Put a list of desired video sources into the `VideoSources` folder, and a list of desired audio sources into the `AudioSources` folder. I recommend keeping the video file formats the same, but it shouldn't matter. The resolution of videos does not matter, either. | 1. Put a list of desired video sources into the `VideoSources` folder, and a list of desired audio sources into the `AudioSources` folder. I recommend keeping the video file formats the same, but it shouldn't matter. The resolution of videos does not matter, either. | ||||||
| 2. Run the script, and choose a seed if you want to reproduce the same video. Otherwise, type 'any' to choose a random seed. | 2. Run the script, and choose a seed if you want to reproduce the same video. Otherwise, type 'any' to choose a random seed. | ||||||
| 3. Choose the amount of videos you want the script to merge together to produce the final result. I recommend 30 for roughly minute-long videos. | 3. Choose the amount of videos you want the script to merge together to produce the final result. I recommend 30 for roughly minute-long videos. | ||||||
| 4. The script will do the rest, and generate the final video in the root folder, which will be formatted as `final_result_<seed>_<number-of-videos>.mp4`. | 4. The script will do the rest, and generate the final video in the root folder, which will be formatted as `final_result_<seed>_<number-of-videos>_<effects-enabled>.mp4`. | ||||||
| 
 | 
 | ||||||
| ## Performance | ## Performance | ||||||
| This script uses moviepy - due to the amount of ffmpeg processes moviepy opens from this script, it has really high memory usage. I have seen this script use upwards of about ~2.5GB of memory for 40 random videos. | This script uses moviepy - due to the amount of ffmpeg processes moviepy opens from this script, it has really high memory usage. I have seen this script use upwards of about ~2.5GB of memory for 40 random videos. | ||||||
|  |  | ||||||
|  | @ -97,6 +97,12 @@ while not videoAmount.isdecimal(): | ||||||
| 
 | 
 | ||||||
| videoAmount = int(videoAmount) | videoAmount = int(videoAmount) | ||||||
| 
 | 
 | ||||||
|  | shouldUseEffects = input("Apply video effects? (y/n): ") | ||||||
|  | while not shouldUseEffects in ["y", "yes", "true", "n", "no", "false"]: | ||||||
|  |     shouldUseEffects = input("Apply video effects? (y/n): ") | ||||||
|  | 
 | ||||||
|  | shouldUseEffects = True if shouldUseEffects in ["y", "yes", "true"] else False | ||||||
|  | 
 | ||||||
| randomVideos = rng.sample(videoFiles, min(videoAmount, len(videoFiles))) | randomVideos = rng.sample(videoFiles, min(videoAmount, len(videoFiles))) | ||||||
| if videoAmount > len(videoFiles): #if there is a higher chosen amount than total, re-use videos | if videoAmount > len(videoFiles): #if there is a higher chosen amount than total, re-use videos | ||||||
|     videoAmountToAdd = videoAmount - len(videoFiles) |     videoAmountToAdd = videoAmount - len(videoFiles) | ||||||
|  | @ -116,7 +122,7 @@ for video in randomVideos: | ||||||
|         startOffset = rng.uniform(0, newClip.duration - randomDuration) |         startOffset = rng.uniform(0, newClip.duration - randomDuration) | ||||||
|         newClip = newClip.subclip(startOffset, startOffset+randomDuration) |         newClip = newClip.subclip(startOffset, startOffset+randomDuration) | ||||||
| 
 | 
 | ||||||
|     if rng.choice([True, True, False]): |     if rng.choice([True, True, False]) and shouldUseEffects: | ||||||
|         newClip = rng.choice(videoEffects)(newClip) #apply a random effect |         newClip = rng.choice(videoEffects)(newClip) #apply a random effect | ||||||
| 
 | 
 | ||||||
|     videoObjects.append(newClip) |     videoObjects.append(newClip) | ||||||
|  | @ -145,7 +151,7 @@ for audio in randomSounds: | ||||||
|     newClip = moviepy.audio.fx.volumex.volumex(newClip, 0.5) # modify volume |     newClip = moviepy.audio.fx.volumex.volumex(newClip, 0.5) # modify volume | ||||||
| 
 | 
 | ||||||
|     if newClip.duration > 5: #for long clips |     if newClip.duration > 5: #for long clips | ||||||
|         randomDuration = rng.uniform(0.7, 6) # crop audio duration |         randomDuration = rng.uniform(0.7, 13) # crop audio duration | ||||||
|         if newClip.duration > randomDuration: # if the audio is longer than the cropped duration, crop the audio at a random position |         if newClip.duration > randomDuration: # if the audio is longer than the cropped duration, crop the audio at a random position | ||||||
|             startOffset = rng.choice([rng.uniform(0, newClip.duration - randomDuration), 0]) #either use a random offset, or start at beginning of audio clip |             startOffset = rng.choice([rng.uniform(0, newClip.duration - randomDuration), 0]) #either use a random offset, or start at beginning of audio clip | ||||||
|             newClip = newClip.subclip(startOffset, startOffset+randomDuration) |             newClip = newClip.subclip(startOffset, startOffset+randomDuration) | ||||||
|  | @ -171,8 +177,10 @@ print(f"Finished compiling audio. Added {copiedSoundAmount} duplicate sounds, to | ||||||
| 
 | 
 | ||||||
| newAudioClip = editor.CompositeAudioClip([finalVideo.audio] + audioObjects) | newAudioClip = editor.CompositeAudioClip([finalVideo.audio] + audioObjects) | ||||||
| 
 | 
 | ||||||
|  | finalVideoFilename = f'final_result_{seed}_{videoAmount}{"_effects" if shouldUseEffects else ""}.mp4' | ||||||
|  | 
 | ||||||
| finalVideo.audio = newAudioClip | finalVideo.audio = newAudioClip | ||||||
| finalVideo.write_videofile(f'final_result_{seed}_{videoAmount}.mp4', fps=30, audio_bitrate="96k") | finalVideo.write_videofile(finalVideoFilename, fps=30, audio_bitrate="96k") | ||||||
| 
 | 
 | ||||||
| for video in videoObjects: | for video in videoObjects: | ||||||
|     video.close() |     video.close() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Chev
						Chev