""" Save a particular frame from a video. """ import argparse from pathlib import Path from typing import List import cv2 import mediapy as media import numpy as np from PIL import Image def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("-i", "--input-video", type=Path, required=True) parser.add_argument("-o", "--output-path", type=str, required=True) parser.add_argument("-n", "--frame", type=int, default=0, help="frame number") args = parser.parse_args() return args def save_video_frame(input_video: Path, output_path: str = None, frame: int = 0): video = media.read_video(input_video) frame = video[frame] Image.fromarray(frame).save(output_path) def main(): args = parse_args() save_video_frame(args.input_video, args.output_path, args.frame) if __name__ == "__main__": main() """ python tools/save_video_frame.py -i /home/xuanlin/simpler_env/results/rt_1_x_tf_trained_for_002272480_step/google_pick_coke_can_1_v4_alt_background/arm_pd_ee_delta_pose_align_interpolate_by_planner_gripper_pd_joint_target_delta_pos_interpolate_by_planner/MoveNearGoogleInScene-v0/rob_0.35_0.21_rot_0.000_-0.000_3.052_rgb_overlay_None/failure_obj_episode_0_all_obj_keep_height_True_moved_correct_obj_False_moved_wrong_obj_True_near_tgt_obj_False_is_closest_to_tgt_False.mp4 \ -o /home/xuanlin/simpler_env/ManiSkill2_real2sim/data/robustness_visualization/move_near_tab4_alt_bg_frame0.png """