mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-22 12:09:42 +00:00
fix(concatenation compatibility): adding compatibility check when concatenating video files
This commit is contained in:
@@ -332,7 +332,6 @@ def aggregate_videos(src_meta, dst_meta, videos_idx, video_files_size_in_mb, chu
|
|||||||
videos_idx: Dictionary tracking video chunk and file indices.
|
videos_idx: Dictionary tracking video chunk and file indices.
|
||||||
video_files_size_in_mb: Maximum size for video files in MB (defaults to DEFAULT_VIDEO_FILE_SIZE_IN_MB)
|
video_files_size_in_mb: Maximum size for video files in MB (defaults to DEFAULT_VIDEO_FILE_SIZE_IN_MB)
|
||||||
chunk_size: Maximum number of files per chunk (defaults to DEFAULT_CHUNK_SIZE)
|
chunk_size: Maximum number of files per chunk (defaults to DEFAULT_CHUNK_SIZE)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict: Updated videos_idx with current chunk and file indices.
|
dict: Updated videos_idx with current chunk and file indices.
|
||||||
"""
|
"""
|
||||||
@@ -417,6 +416,7 @@ def aggregate_videos(src_meta, dst_meta, videos_idx, video_files_size_in_mb, chu
|
|||||||
concatenate_video_files(
|
concatenate_video_files(
|
||||||
[dst_path, src_path],
|
[dst_path, src_path],
|
||||||
dst_path,
|
dst_path,
|
||||||
|
compatibilty_check=True,
|
||||||
)
|
)
|
||||||
# Update duration of this destination file
|
# Update duration of this destination file
|
||||||
dst_file_durations[dst_key] = current_dst_duration + src_duration
|
dst_file_durations[dst_key] = current_dst_duration + src_duration
|
||||||
|
|||||||
@@ -555,7 +555,7 @@ def encode_video_frames(
|
|||||||
|
|
||||||
|
|
||||||
def concatenate_video_files(
|
def concatenate_video_files(
|
||||||
input_video_paths: list[Path | str], output_video_path: Path, overwrite: bool = True
|
input_video_paths: list[Path | str], output_video_path: Path, overwrite: bool = True, compatibilty_check: bool = False
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Concatenate multiple video files into a single video file using pyav.
|
Concatenate multiple video files into a single video file using pyav.
|
||||||
@@ -568,6 +568,7 @@ def concatenate_video_files(
|
|||||||
input_video_paths: Ordered list of input video file paths to concatenate.
|
input_video_paths: Ordered list of input video file paths to concatenate.
|
||||||
output_video_path: Path to the output video file.
|
output_video_path: Path to the output video file.
|
||||||
overwrite: Whether to overwrite the output video file if it already exists. Default is True.
|
overwrite: Whether to overwrite the output video file if it already exists. Default is True.
|
||||||
|
compatibilty_check: Whether to check if the input videos are compatible. Default is False.
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
- Creates a temporary directory for intermediate files that is cleaned up after use.
|
- Creates a temporary directory for intermediate files that is cleaned up after use.
|
||||||
@@ -586,6 +587,14 @@ def concatenate_video_files(
|
|||||||
if len(input_video_paths) == 0:
|
if len(input_video_paths) == 0:
|
||||||
raise FileNotFoundError("No input video paths provided.")
|
raise FileNotFoundError("No input video paths provided.")
|
||||||
|
|
||||||
|
# This check may be skipped at recording time as videos are encoded with the same encoder config.
|
||||||
|
if compatibilty_check:
|
||||||
|
reference_video_info = get_video_info(input_video_paths[0])
|
||||||
|
for input_path in input_video_paths[1:]:
|
||||||
|
video_info = get_video_info(input_path)
|
||||||
|
if video_info["video.height"] != reference_video_info["video.height"] or video_info["video.width"] != reference_video_info["video.width"] or video_info["video.fps"] != reference_video_info["video.fps"] or video_info["video.codec"] != reference_video_info["video.codec"] or video_info["video.pix_fmt"] != reference_video_info["video.pix_fmt"]:
|
||||||
|
raise ValueError(f"Input video {input_path} is not compatible with the reference video {input_video_paths[0]}.")
|
||||||
|
|
||||||
# Create a temporary .ffconcat file to list the input video paths
|
# Create a temporary .ffconcat file to list the input video paths
|
||||||
with tempfile.NamedTemporaryFile(mode="w", suffix=".ffconcat", delete=False) as tmp_concatenate_file:
|
with tempfile.NamedTemporaryFile(mode="w", suffix=".ffconcat", delete=False) as tmp_concatenate_file:
|
||||||
tmp_concatenate_file.write("ffconcat version 1.0\n")
|
tmp_concatenate_file.write("ffconcat version 1.0\n")
|
||||||
|
|||||||
Reference in New Issue
Block a user