From 7466788b2e0a4fa54b9d7283f7d1c8899fac726a Mon Sep 17 00:00:00 2001 From: machenmusik Date: Thu, 19 Jan 2023 13:02:43 -0500 Subject: [PATCH] downsample all images (#1259) CottageMiniature sample dataset was only downsampling first image correctly prior to this fix. --- nerfstudio/process_data/process_data_utils.py | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/nerfstudio/process_data/process_data_utils.py b/nerfstudio/process_data/process_data_utils.py index 24797658b..d5da2541d 100644 --- a/nerfstudio/process_data/process_data_utils.py +++ b/nerfstudio/process_data/process_data_utils.py @@ -14,6 +14,7 @@ """Helper utils for processing data into the nerfstudio format.""" +import os import shutil import sys from enum import Enum @@ -203,15 +204,17 @@ def downscale_images(image_dir: Path, num_downscales: int, verbose: bool = False assert isinstance(downscale_factor, int) downscale_dir = image_dir.parent / f"images_{downscale_factor}" downscale_dir.mkdir(parents=True, exist_ok=True) - file_type = image_dir.glob("frame_*").__next__().suffix - filename = f"frame_%05d{file_type}" - ffmpeg_cmd = [ - f"ffmpeg -i {image_dir / filename} ", - f"-q:v 2 -vf scale=iw/{downscale_factor}:ih/{downscale_factor} ", - f"{downscale_dir / filename}", - ] - ffmpeg_cmd = " ".join(ffmpeg_cmd) - run_command(ffmpeg_cmd, verbose=verbose) + # Using %05d ffmpeg commands appears to be unreliable (skips images), so use scandir. + files = os.scandir(image_dir) + for f in files: + filename = f.name + ffmpeg_cmd = [ + f"ffmpeg -y -i {image_dir / filename} ", + f"-q:v 2 -vf scale=iw/{downscale_factor}:ih/{downscale_factor} ", + f"{downscale_dir / filename}", + ] + ffmpeg_cmd = " ".join(ffmpeg_cmd) + run_command(ffmpeg_cmd, verbose=verbose) CONSOLE.log("[bold green]:tada: Done downscaling images.") downscale_text = [f"[bold blue]{2**(i+1)}x[/bold blue]" for i in range(num_downscales)]