Skip to content

Commit

Permalink
GIF SUPPORT & fix when video without audio
Browse files Browse the repository at this point in the history
  • Loading branch information
JargeZ committed Jan 5, 2022
1 parent c066f87 commit e4ab56d
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 17 deletions.
9 changes: 7 additions & 2 deletions app/NtscApp.py
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,8 @@ def open_video(self, path: Path):
"height": int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)),
"frames_count": int(cap.get(cv2.CAP_PROP_FRAME_COUNT)),
"orig_fps": cap.get(cv2.CAP_PROP_FPS),
"path": path
"path": path,
"suffix": path.suffix.lower(),
}
logger.debug(f"selfinput: {self.input_video}")
self.orig_wh = (int(self.input_video["width"]), int(self.input_video["height"]))
Expand Down Expand Up @@ -502,7 +503,11 @@ def render_image(self):
im_buf_arr.tofile(target_file)

def render_video(self):
target_file = pick_save_file(self, title='Render video as', suffix='.mp4')
if self.input_video['suffix'] == ".gif":
suffix = self.input_video['suffix']
else:
suffix = ".mp4"
target_file = pick_save_file(self, title='Render video as', suffix=suffix)
if not target_file:
return None
render_data = {
Expand Down
46 changes: 31 additions & 15 deletions app/Renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@ class Renderer(QtCore.QObject):
def run(self):
self.running = True

tmp_output = self.render_data['target_file'].parent / f'tmp_{self.render_data["target_file"].name}'
if self.render_data["input_video"]["suffix"] == '.gif':
suffix = '.mp4'
else:
suffix = self.render_data["input_video"]["suffix"]

tmp_output = self.render_data['target_file'].parent / f'tmp_{self.render_data["target_file"].stem}{suffix}'

upscale_2x = self.render_data["upscale_2x"]

Expand All @@ -42,7 +47,7 @@ def run(self):
cv2.VideoWriter_fourcc(*'H264')
]
video = cv2.VideoWriter()

open_result = False
while not open_result:
open_result = video.open(
Expand Down Expand Up @@ -104,19 +109,30 @@ def run(self):
video.write(frame)

video.release()
audio_orig = (
ffmpeg
.input(str(self.render_data["input_video"]["path"].resolve()))
)
self.sendStatus.emit('Original audio extracted')
video = ffmpeg.input(str(tmp_output.resolve()))
(
ffmpeg
.output(video.video, audio_orig.audio, str(self.render_data["target_file"].resolve()),
shortest=None, vcodec='copy', acodec='copy')
.overwrite_output()
.run()
)

orig_path = str(self.render_data["input_video"]["path"].resolve())
orig_suffix = self.render_data["input_video"]["suffix"]
result_path = str(self.render_data["target_file"].resolve())

# FIXME beautify file render and audio detection

orig = ffmpeg.input(orig_path)
temp_video_stream = ffmpeg.input(str(tmp_output.resolve()))
# render_streams.append(temp_video_stream.video)

ff_command = ffmpeg.output(orig.audio, temp_video_stream.video, result_path,
shortest=None, vcodec='copy', acodec='copy')
logger.debug(ff_command)
logger.debug(' '.join(ff_command.compile()))
try:
ff_command.overwrite_output().run()
except ffmpeg.Error as e:
if orig_suffix == '.gif':
ff_command = ffmpeg.output(temp_video_stream.video, result_path, shortest=None)
else:
ff_command = ffmpeg.output(temp_video_stream.video, result_path, shortest=None, vcodec='copy')
ff_command.overwrite_output().run()

self.sendStatus.emit('Audio copy done')
tmp_output.unlink()
self.renderStateChanged.emit(False)
Expand Down

0 comments on commit e4ab56d

Please sign in to comment.