mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-23 20:50:02 +00:00
chore(duplicate): removing duplicate get_codec_options definition
This commit is contained in:
@@ -145,90 +145,66 @@ class VideoEncoderConfig:
|
|||||||
|
|
||||||
|
|
||||||
def get_codec_options(self, encoder_threads: int | None = None) -> dict[str, str]:
|
def get_codec_options(self, encoder_threads: int | None = None) -> dict[str, str]:
|
||||||
"""Build codec-specific FFmpeg options from the tuning fields.
|
"""Translate the tuning fields to codec-specific FFmpeg options.
|
||||||
|
|
||||||
|
``VideoEncoderConfig.extra_options`` are merged last but never override a structured field.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
encoder_threads: Number of encoder threads set globally for all VideoEncoderConfigs. For libsvtav1, this is mapped to ``lp`` via ``svtav1-params``. For h264/hevc, this is mapped to ``threads``. Hardware encoders ignore this.
|
encoder_threads: Number of encoder threads set globally for all VideoEncoderConfigs. For libsvtav1, this is mapped to ``lp`` via ``svtav1-params``. For h264/hevc, this is mapped to ``threads``. Hardware encoders ignore this.
|
||||||
"""
|
"""
|
||||||
return _get_codec_options(
|
|
||||||
self.vcodec,
|
|
||||||
g=self.g,
|
|
||||||
crf=self.crf,
|
|
||||||
preset=self.preset,
|
|
||||||
fast_decode=self.fast_decode,
|
|
||||||
encoder_threads=encoder_threads,
|
|
||||||
extra_options=self.extra_options,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def camera_encoder_defaults() -> VideoEncoderConfig:
|
|
||||||
"""Return a :class:`VideoEncoderConfig` with RGB-camera defaults."""
|
|
||||||
return VideoEncoderConfig()
|
|
||||||
|
|
||||||
|
|
||||||
def _get_codec_options(
|
|
||||||
vcodec: str,
|
|
||||||
*,
|
|
||||||
g: int | None,
|
|
||||||
crf: int | None,
|
|
||||||
preset: int | str | None,
|
|
||||||
fast_decode: int,
|
|
||||||
encoder_threads: int | None,
|
|
||||||
extra_options: dict[str, Any] | None = None,
|
|
||||||
) -> dict[str, str]:
|
|
||||||
"""Translate tuning options to FFmpeg codec options.
|
|
||||||
|
|
||||||
``extra_options`` are merged last and take precedence over the named fields.
|
|
||||||
"""
|
|
||||||
opts: dict[str, str] = {}
|
opts: dict[str, str] = {}
|
||||||
|
|
||||||
def set_if(key: str, value: Any) -> None:
|
def set_if(key: str, value: Any) -> None:
|
||||||
if value is not None:
|
if value is not None:
|
||||||
opts[key] = str(value)
|
opts[key] = str(value)
|
||||||
|
|
||||||
if vcodec == "libsvtav1":
|
if self.vcodec == "libsvtav1":
|
||||||
set_if("g", g)
|
set_if("g", self.g)
|
||||||
set_if("crf", crf)
|
set_if("crf", self.crf)
|
||||||
set_if("preset", preset)
|
set_if("preset", self.preset)
|
||||||
svtav1_parts: list[str] = []
|
svtav1_parts: list[str] = []
|
||||||
if fast_decode:
|
if self.fast_decode:
|
||||||
svtav1_parts.append(f"fast-decode={fast_decode}")
|
svtav1_parts.append(f"fast-decode={self.fast_decode}")
|
||||||
if encoder_threads is not None:
|
if encoder_threads is not None:
|
||||||
svtav1_parts.append(f"lp={encoder_threads}")
|
svtav1_parts.append(f"lp={encoder_threads}")
|
||||||
if svtav1_parts:
|
if svtav1_parts:
|
||||||
opts["svtav1-params"] = ":".join(svtav1_parts)
|
opts["svtav1-params"] = ":".join(svtav1_parts)
|
||||||
elif vcodec in ("h264", "hevc"):
|
elif self.vcodec in ("h264", "hevc"):
|
||||||
set_if("g", g)
|
set_if("g", self.g)
|
||||||
set_if("crf", crf)
|
set_if("crf", self.crf)
|
||||||
set_if("preset", preset)
|
set_if("preset", self.preset)
|
||||||
if fast_decode:
|
if self.fast_decode:
|
||||||
opts["tune"] = "fastdecode"
|
opts["tune"] = "fastdecode"
|
||||||
set_if("threads", encoder_threads)
|
set_if("threads", encoder_threads)
|
||||||
elif vcodec in ("h264_videotoolbox", "hevc_videotoolbox"):
|
elif self.vcodec in ("h264_videotoolbox", "hevc_videotoolbox"):
|
||||||
set_if("g", g)
|
set_if("g", self.g)
|
||||||
if crf is not None:
|
if self.crf is not None:
|
||||||
opts["q:v"] = str(max(1, min(100, 100 - crf * 2)))
|
opts["q:v"] = str(max(1, min(100, 100 - self.crf * 2)))
|
||||||
elif vcodec in ("h264_nvenc", "hevc_nvenc"):
|
elif self.vcodec in ("h264_nvenc", "hevc_nvenc"):
|
||||||
opts["rc"] = "constqp"
|
opts["rc"] = "constqp"
|
||||||
set_if("qp", crf)
|
set_if("qp", self.crf)
|
||||||
set_if("preset", preset)
|
set_if("preset", self.preset)
|
||||||
elif vcodec == "h264_vaapi":
|
elif self.vcodec == "h264_vaapi":
|
||||||
set_if("qp", crf)
|
set_if("qp", self.crf)
|
||||||
elif vcodec == "h264_qsv":
|
elif self.vcodec == "h264_qsv":
|
||||||
set_if("global_quality", crf)
|
set_if("global_quality", self.crf)
|
||||||
set_if("preset", preset)
|
set_if("preset", self.preset)
|
||||||
else:
|
else:
|
||||||
set_if("g", g)
|
set_if("g", self.g)
|
||||||
set_if("crf", crf)
|
set_if("crf", self.crf)
|
||||||
set_if("preset", preset)
|
set_if("preset", self.preset)
|
||||||
|
|
||||||
if extra_options:
|
for k, v in self.extra_options.items():
|
||||||
for k, v in extra_options.items():
|
|
||||||
opts.setdefault(k, str(v))
|
opts.setdefault(k, str(v))
|
||||||
|
|
||||||
return opts
|
return opts
|
||||||
|
|
||||||
|
|
||||||
|
def camera_encoder_defaults() -> VideoEncoderConfig:
|
||||||
|
"""Return a :class:`VideoEncoderConfig` with RGB-camera defaults."""
|
||||||
|
return VideoEncoderConfig()
|
||||||
|
|
||||||
|
|
||||||
def decode_video_frames(
|
def decode_video_frames(
|
||||||
video_path: Path | str,
|
video_path: Path | str,
|
||||||
timestamps: list[float],
|
timestamps: list[float],
|
||||||
|
|||||||
Reference in New Issue
Block a user