Добавлено перемещение изображений и сборка видео с помощью ffmpeg; улучшено логирование
This commit is contained in:
43
main.py
43
main.py
@@ -169,7 +169,7 @@ def main():
|
|||||||
prev_frame_path = None
|
prev_frame_path = None
|
||||||
frame_count = 0
|
frame_count = 0
|
||||||
for frame_paths in video_frames_to_disk_generator(video_path, output_dir):
|
for frame_paths in video_frames_to_disk_generator(video_path, output_dir):
|
||||||
logging.info(f"Processing frames: {frame_paths}")
|
logging.info(f"Processing frames: {len(frame_paths)}")
|
||||||
|
|
||||||
if prev_frame_path is not None:
|
if prev_frame_path is not None:
|
||||||
img1 = prev_frame_path[-1]
|
img1 = prev_frame_path[-1]
|
||||||
@@ -193,12 +193,47 @@ def main():
|
|||||||
def builder():
|
def builder():
|
||||||
frames_dir = "output/frames"
|
frames_dir = "output/frames"
|
||||||
interpolated_dir = "output/interpolated"
|
interpolated_dir = "output/interpolated"
|
||||||
list_path = "file_list.txt"
|
moved_dir = "output/moved"
|
||||||
video_path = "source/video.mp4"
|
video_path = "source/video.mp4"
|
||||||
output_video = "output/interpolated_video.mp4"
|
output_video = "output/interpolated_video.mp4"
|
||||||
build_file_list('output/moved_frames', list_path)
|
move_images(frames_dir, interpolated_dir, moved_dir)
|
||||||
merge_with_ffmpeg(video_path, list_path, output_video)
|
|
||||||
|
|
||||||
|
cap = cv2.VideoCapture(video_path)
|
||||||
|
|
||||||
|
if not cap.isOpened():
|
||||||
|
raise ValueError("Cannot open original video")
|
||||||
|
|
||||||
|
fps = cap.get(cv2.CAP_PROP_FPS)
|
||||||
|
cmd = [
|
||||||
|
"ffmpeg",
|
||||||
|
"-y",
|
||||||
|
"-framerate", str(fps * 2),
|
||||||
|
"-i", f"{moved_dir}/img_%08d.png",
|
||||||
|
"-i", video_path,
|
||||||
|
"-c:v", "libx264",
|
||||||
|
"-c:a", "copy",
|
||||||
|
"-shortest",
|
||||||
|
output_video,
|
||||||
|
]
|
||||||
|
logging.info("Running ffmpeg command to build final video: " + " ".join(cmd))
|
||||||
|
subprocess.run(cmd, check=True)
|
||||||
|
|
||||||
|
|
||||||
|
def cleanup():
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
frames_dir = "output/frames"
|
||||||
|
interpolated_dir = "output/interpolated"
|
||||||
|
moved_dir = "output/moved"
|
||||||
|
os.makedirs(frames_dir, exist_ok=True)
|
||||||
|
os.makedirs(interpolated_dir, exist_ok=True)
|
||||||
|
os.makedirs(moved_dir, exist_ok=True)
|
||||||
|
shutil.rmtree(frames_dir)
|
||||||
|
shutil.rmtree(interpolated_dir)
|
||||||
|
shutil.rmtree(moved_dir)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
cleanup()
|
||||||
main()
|
main()
|
||||||
|
builder()
|
||||||
|
cleanup()
|
||||||
|
|||||||
Reference in New Issue
Block a user