From a6016539b6acd1ac8e8557bb2512790456a11715 Mon Sep 17 00:00:00 2001 From: chappjo <62079229+chappjo@users.noreply.github.com> Date: Mon, 14 Dec 2020 17:58:48 +1300 Subject: [PATCH 1/2] Make audio transfer lossless --- inference_video.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/inference_video.py b/inference_video.py index a42d73c..d6ce0f0 100644 --- a/inference_video.py +++ b/inference_video.py @@ -14,22 +14,19 @@ warnings.filterwarnings("ignore") def transferAudio(sourceVideo, targetVideo): import shutil import moviepy.editor - tempAudioFileName = "./temp/audio.mp3" + tempAudioFileName = "./temp/audio.mkv" # split audio from original video file and store in "temp" directory if True: - # extract audio from video - if True: - video = moviepy.editor.VideoFileClip(sourceVideo) - audio = video.audio + # clear old "temp" directory if it exits if os.path.isdir("temp"): # remove temp directory shutil.rmtree("temp") # create new "temp" directory os.makedirs("temp") - # write audio file to "temp" directory - audio.write_audiofile(tempAudioFileName) + # extract audio from video + os.system("ffmpeg -y -i " + sourceVideo + " -c:a copy -vn " + tempAudioFileName) os.rename(targetVideo, "noAudio_"+targetVideo) # combine audio file and new video file From 88eb4384d46278b0e0d0cb12dc3d11fefce41d61 Mon Sep 17 00:00:00 2001 From: chappjo <62079229+chappjo@users.noreply.github.com> Date: Mon, 14 Dec 2020 20:50:54 +1300 Subject: [PATCH 2/2] Add fallback for lossless transfer --- inference_video.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/inference_video.py b/inference_video.py index d6ce0f0..f155cbb 100644 --- a/inference_video.py +++ b/inference_video.py @@ -31,6 +31,13 @@ def transferAudio(sourceVideo, targetVideo): os.rename(targetVideo, "noAudio_"+targetVideo) # combine audio file and new video file os.system("ffmpeg -y -i " + "noAudio_"+targetVideo + " -i " + tempAudioFileName + " -c copy " + targetVideo) + + if os.path.getsize(targetVideo) == 0: # if ffmpeg failed to merge the video and audio together try converting the audio to mp3 + tempAudioFileName = "./temp/audio.mp3" + os.system("ffmpeg -y -i " + sourceVideo + " -c:a mp3 -vn " + tempAudioFileName) + os.system("ffmpeg -y -i " + "noAudio_"+targetVideo + " -i " + tempAudioFileName + " -c copy " + targetVideo) + print("Lossless audio transfer failed. Audio was transcoded to mp3 instead.") + # remove audio-less video os.remove("noAudio_"+targetVideo)