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?
# print(f"Returning duration {duration} from ffmpeg null muxer stream duration for {filename}...")
return duration
if filename.lower().endswith('.mp3'):
try:
duration=float(AudioSegment.from_mp3(filename).duration_seconds)
# print(f"Returning duration {duration} from AudioSegment for {filename}...")
return duration
except:
pass
try:
duration=float(AudioFileClip(filename).duration)
# print(f"Returning duration {duration} from AudioFileClip for {filename}...")
return duration
except:
pass
if filename.lower().endswith('.mp4'):
try:
duration=float(VideoFileClip(filename).duration)
# print(f"Returning duration {duration} from VideoFileClip for {filename}...")
return duration
except:
pass
# if filename.lower().endswith('.mp3'):
# try:
# duration=float(AudioSegment.from_mp3(filename).duration_seconds)
# # print(f"Returning duration {duration} from AudioSegment for {filename}...")
# return duration
# except:
# pass
# try:
# duration=float(AudioFileClip(filename).duration)
# # print(f"Returning duration {duration} from AudioFileClip for {filename}...")
# return duration
# except:
# pass
# if filename.lower().endswith('.mp4'):
# try:
# duration=float(VideoFileClip(filename).duration)
# # print(f"Returning duration {duration} from VideoFileClip for {filename}...")
# return duration
# except:
# pass
probe_info=ffmpeg.probe(filename)
duration=float(probe_info["format"]["duration"])
# 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:
audio_choice = f"{background_config['audio'][2]}-{background_config['audio'][1]}"
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"]):
background_looped_audio_file_path = f"assets/backgrounds/audio/looped-{audio_choice}"
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_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}")
if bool(settings.config["settings"]["background"][f"background_video_loop"]):
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:
output_path = f"assets/temp/{reddit_id}/background_noaudio.mp4"
input_path = f"assets/temp/{reddit_id}/background.mp4"
input_duration=get_duration(input_path)
input_duration=get_duration(input_path, True)
output = (
ffmpeg.input(input_path)
.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_durations = [
get_duration(f"assets/temp/{reddit_id}/mp3/title.mp3"),
get_duration(f"assets/temp/{reddit_id}/mp3/postaudio.mp3")
get_duration(f"assets/temp/{reddit_id}/mp3/title.mp3", True),
get_duration(f"assets/temp/{reddit_id}/mp3/postaudio.mp3", True)
]
elif settings.config["settings"]["storymodemethod"] == 1:
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_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...")
]
audio_clips_durations.insert(
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")
@ -158,12 +158,12 @@ def make_final_video(
audio_clips.insert(0, ffmpeg.input(f"assets/temp/{reddit_id}/mp3/title.mp3"))
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)
]
audio_clips_durations.insert(
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)
ffmpeg_progress_run(

Loading…
Cancel
Save