Speed improvement for when accurate durations dont matter

pull/1873/head
KyleBoyer 2 years ago
parent 00d0339714
commit 98d8d1d1f1

@ -32,26 +32,26 @@ def get_duration(filename, skip_accurate_decode=False):
duration=max(stream_durations) # sum? duration=max(stream_durations) # sum?
# print(f"Returning duration {duration} from ffmpeg null muxer stream duration for {filename}...") # print(f"Returning duration {duration} from ffmpeg null muxer stream duration for {filename}...")
return duration return duration
if filename.lower().endswith('.mp3'): # if filename.lower().endswith('.mp3'):
try: # try:
duration=float(AudioSegment.from_mp3(filename).duration_seconds) # duration=float(AudioSegment.from_mp3(filename).duration_seconds)
# print(f"Returning duration {duration} from AudioSegment for {filename}...") # # print(f"Returning duration {duration} from AudioSegment for {filename}...")
return duration # return duration
except: # except:
pass # pass
try: # try:
duration=float(AudioFileClip(filename).duration) # duration=float(AudioFileClip(filename).duration)
# print(f"Returning duration {duration} from AudioFileClip for {filename}...") # # print(f"Returning duration {duration} from AudioFileClip for {filename}...")
return duration # return duration
except: # except:
pass # pass
if filename.lower().endswith('.mp4'): # if filename.lower().endswith('.mp4'):
try: # try:
duration=float(VideoFileClip(filename).duration) # duration=float(VideoFileClip(filename).duration)
# print(f"Returning duration {duration} from VideoFileClip for {filename}...") # # print(f"Returning duration {duration} from VideoFileClip for {filename}...")
return duration # return duration
except: # except:
pass # pass
probe_info=ffmpeg.probe(filename) probe_info=ffmpeg.probe(filename)
duration=float(probe_info["format"]["duration"]) duration=float(probe_info["format"]["duration"])
# print(f"Returning duration {duration} from ffprobe for {filename}...") # print(f"Returning duration {duration} from ffprobe for {filename}...")

@ -137,7 +137,7 @@ def chop_background(background_config: Dict[str, Tuple], video_length: int, redd
else: else:
audio_choice = f"{background_config['audio'][2]}-{background_config['audio'][1]}" audio_choice = f"{background_config['audio'][2]}-{background_config['audio'][1]}"
audio_file_path=f"assets/backgrounds/audio/{audio_choice}" audio_file_path=f"assets/backgrounds/audio/{audio_choice}"
audio_file_duration=get_duration(audio_file_path) audio_file_duration=get_duration(audio_file_path, True)
if bool(settings.config["settings"]["background"][f"background_audio_loop"]): if bool(settings.config["settings"]["background"][f"background_audio_loop"]):
background_looped_audio_file_path = f"assets/backgrounds/audio/looped-{audio_choice}" background_looped_audio_file_path = f"assets/backgrounds/audio/looped-{audio_choice}"
background_audio_loops = math.ceil(video_length / audio_file_duration) background_audio_loops = math.ceil(video_length / audio_file_duration)
@ -179,7 +179,7 @@ def chop_background(background_config: Dict[str, Tuple], video_length: int, redd
video_choice = f"{background_config['video'][2]}-{background_config['video'][1]}" video_choice = f"{background_config['video'][2]}-{background_config['video'][1]}"
video_file_path = f"assets/backgrounds/video/{video_choice}" video_file_path = f"assets/backgrounds/video/{video_choice}"
video_file_duration=get_duration(video_file_path) video_file_duration=get_duration(video_file_path, True)
# print(f"Original duration before looping: {video_file_duration}") # print(f"Original duration before looping: {video_file_duration}")
if bool(settings.config["settings"]["background"][f"background_video_loop"]): if bool(settings.config["settings"]["background"][f"background_video_loop"]):
background_looped_video_file_path = f"assets/backgrounds/video/looped-{video_choice}" background_looped_video_file_path = f"assets/backgrounds/video/looped-{video_choice}"

@ -42,7 +42,7 @@ def name_normalize(name: str) -> str:
def prepare_background(reddit_id: str, W: int, H: int) -> str: def prepare_background(reddit_id: str, W: int, H: int) -> str:
output_path = f"assets/temp/{reddit_id}/background_noaudio.mp4" output_path = f"assets/temp/{reddit_id}/background_noaudio.mp4"
input_path = f"assets/temp/{reddit_id}/background.mp4" input_path = f"assets/temp/{reddit_id}/background.mp4"
input_duration=get_duration(input_path) input_duration=get_duration(input_path, True)
output = ( output = (
ffmpeg.input(input_path) ffmpeg.input(input_path)
.filter("crop", f"ih*({W}/{H})", "ih") .filter("crop", f"ih*({W}/{H})", "ih")
@ -129,8 +129,8 @@ def make_final_video(
audio_clips.insert(1, ffmpeg.input(f"assets/temp/{reddit_id}/mp3/postaudio.mp3")) audio_clips.insert(1, ffmpeg.input(f"assets/temp/{reddit_id}/mp3/postaudio.mp3"))
audio_clips_durations = [ audio_clips_durations = [
get_duration(f"assets/temp/{reddit_id}/mp3/title.mp3"), get_duration(f"assets/temp/{reddit_id}/mp3/title.mp3", True),
get_duration(f"assets/temp/{reddit_id}/mp3/postaudio.mp3") get_duration(f"assets/temp/{reddit_id}/mp3/postaudio.mp3", True)
] ]
elif settings.config["settings"]["storymodemethod"] == 1: elif settings.config["settings"]["storymodemethod"] == 1:
audio_clips = [ audio_clips = [
@ -141,12 +141,12 @@ def make_final_video(
audio_clips.insert(0, ffmpeg.input(f"assets/temp/{reddit_id}/mp3/title.mp3")) audio_clips.insert(0, ffmpeg.input(f"assets/temp/{reddit_id}/mp3/title.mp3"))
audio_clips_durations = [ audio_clips_durations = [
get_duration(f"assets/temp/{reddit_id}/mp3/postaudio-{i}.mp3") get_duration(f"assets/temp/{reddit_id}/mp3/postaudio-{i}.mp3", True)
for i in track(range(number_of_clips + 1), "🎶 Calculating audio file durations...") for i in track(range(number_of_clips + 1), "🎶 Calculating audio file durations...")
] ]
audio_clips_durations.insert( audio_clips_durations.insert(
0, 0,
get_duration(f"assets/temp/{reddit_id}/mp3/title.mp3") get_duration(f"assets/temp/{reddit_id}/mp3/title.mp3", True)
) )
print_substep("Calculated audio file durations successfully!", style="bold green") print_substep("Calculated audio file durations successfully!", style="bold green")
@ -158,12 +158,12 @@ def make_final_video(
audio_clips.insert(0, ffmpeg.input(f"assets/temp/{reddit_id}/mp3/title.mp3")) audio_clips.insert(0, ffmpeg.input(f"assets/temp/{reddit_id}/mp3/title.mp3"))
audio_clips_durations = [ audio_clips_durations = [
get_duration(f"assets/temp/{reddit_id}/mp3/{i}.mp3") get_duration(f"assets/temp/{reddit_id}/mp3/{i}.mp3", True)
for i in range(number_of_clips) for i in range(number_of_clips)
] ]
audio_clips_durations.insert( audio_clips_durations.insert(
0, 0,
get_duration(f"assets/temp/{reddit_id}/mp3/title.mp3") get_duration(f"assets/temp/{reddit_id}/mp3/title.mp3", True)
) )
audio_concat = ffmpeg.concat(*audio_clips, a=1, v=0) audio_concat = ffmpeg.concat(*audio_clips, a=1, v=0)
ffmpeg_progress_run( ffmpeg_progress_run(

Loading…
Cancel
Save