Fixed bug for videos without audio, reactivated HW acceleration for ffmpeg
This commit is contained in:
35
refacer.py
35
refacer.py
@@ -103,13 +103,18 @@ class Refacer:
|
|||||||
|
|
||||||
return replacements
|
return replacements
|
||||||
def __convert_video(self,video_path,output_video_path):
|
def __convert_video(self,video_path,output_video_path):
|
||||||
print("Merging audio with the refaced video...")
|
if self.video_has_audio:
|
||||||
new_path = output_video_path + str(random.randint(0,999)) + "_c.mp4"
|
print("Merging audio with the refaced video...")
|
||||||
#stream = ffmpeg.input(output_video_path)
|
new_path = output_video_path + str(random.randint(0,999)) + "_c.mp4"
|
||||||
in1 = ffmpeg.input(output_video_path)
|
#stream = ffmpeg.input(output_video_path)
|
||||||
in2 = ffmpeg.input(video_path)
|
in1 = ffmpeg.input(output_video_path)
|
||||||
out = ffmpeg.output(in1.video, in2.audio, new_path,vcodec=self.ffmpeg_video_encoder)
|
in2 = ffmpeg.input(video_path)
|
||||||
out.run(overwrite_output=True,quiet=True)
|
out = ffmpeg.output(in1.video, in2.audio, new_path,vcodec=self.ffmpeg_video_encoder)
|
||||||
|
out.run(overwrite_output=True,quiet=True)
|
||||||
|
else:
|
||||||
|
new_path = output_video_path
|
||||||
|
print("The video doesn't have audio, so post-processing is not necessary")
|
||||||
|
|
||||||
print(f"The process has finished.\nThe refaced video can be found at {os.path.abspath(new_path)}")
|
print(f"The process has finished.\nThe refaced video can be found at {os.path.abspath(new_path)}")
|
||||||
return new_path
|
return new_path
|
||||||
|
|
||||||
@@ -139,17 +144,21 @@ class Refacer:
|
|||||||
frame = self.face_swapper.get(frame, face, rep_face[1], paste_back=True)
|
frame = self.face_swapper.get(frame, face, rep_face[1], paste_back=True)
|
||||||
return frame
|
return frame
|
||||||
|
|
||||||
def reface(self, video_path, faces):
|
def __check_video_has_audio(self,video_path):
|
||||||
|
self.video_has_audio = False
|
||||||
|
probe = ffmpeg.probe(video_path)
|
||||||
|
audio_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'audio'), None)
|
||||||
|
if audio_stream is not None:
|
||||||
|
self.video_has_audio = True
|
||||||
|
def reface(self, video_path, faces):
|
||||||
|
|
||||||
|
self.__check_video_has_audio(video_path)
|
||||||
output_video_path = os.path.join('out',Path(video_path).name)
|
output_video_path = os.path.join('out',Path(video_path).name)
|
||||||
self.replacement_faces=self.__prepare_faces(faces)
|
self.replacement_faces=self.__prepare_faces(faces)
|
||||||
|
|
||||||
cap = cv2.VideoCapture(video_path)
|
cap = cv2.VideoCapture(video_path)
|
||||||
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
|
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
|
||||||
print(f"Total frames: {total_frames}")
|
print(f"Total frames: {total_frames}")
|
||||||
|
|
||||||
#probe = ffmpeg.probe(video_path)
|
|
||||||
#video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
|
|
||||||
#print(video_stream)
|
|
||||||
|
|
||||||
fps = cap.get(cv2.CAP_PROP_FPS)
|
fps = cap.get(cv2.CAP_PROP_FPS)
|
||||||
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
||||||
@@ -197,7 +206,7 @@ class Refacer:
|
|||||||
|
|
||||||
VIDEO_CODECS = [
|
VIDEO_CODECS = [
|
||||||
#'h264_videotoolbox', #osx HW acceleration
|
#'h264_videotoolbox', #osx HW acceleration
|
||||||
#'h264_nvenc', #NVIDIA HW acceleration
|
'h264_nvenc', #NVIDIA HW acceleration
|
||||||
#'h264_qsv', #Intel HW acceleration
|
#'h264_qsv', #Intel HW acceleration
|
||||||
#'h264_vaapi', #Intel HW acceleration
|
#'h264_vaapi', #Intel HW acceleration
|
||||||
#'h264_omx', #HW acceleration
|
#'h264_omx', #HW acceleration
|
||||||
|
|||||||
Reference in New Issue
Block a user