diff --git a/docs/source/video_encoding_parameters.mdx b/docs/source/video_encoding_parameters.mdx index c2564955f..859de0a51 100644 --- a/docs/source/video_encoding_parameters.mdx +++ b/docs/source/video_encoding_parameters.mdx @@ -79,14 +79,14 @@ All flags below are prefixed with `--dataset.camera_encoder.` on the CLI. How each field is forwarded to FFmpeg after `vcodec` resolution, via `get_codec_options()`. Only fields on `camera_encoder` are listed here (no global thread / queue flags). -| Resolved `vcodec` | Quality from `crf` | `preset` | `fast_decode` | -| ---------------------------------------- | --------------------------- | -------- | ------------------------------------------ | -| `libsvtav1` | `crf` | `preset` | `svtav1-params` includes `fast-decode=0…2` | -| `h264`, `hevc` (software) | `crf` | `preset` | `tune=fastdecode` if `fast_decode > 0` | -| `h264_videotoolbox`, `hevc_videotoolbox` | `q:v` (derived from `crf`) | — | — | -| `h264_nvenc`, `hevc_nvenc` | `rc=constqp` + `qp` ← `crf` | `preset` | — | -| `h264_vaapi` | `qp` ← `crf` | — | — | -| `h264_qsv` | `global_quality` ← `crf` | `preset` | — | +| Resolved `vcodec` | Quality from `crf` | `preset` | `fast_decode` | +| ---------------------------------------- | -------------------------- | -------- | ------------------------------------------ | +| `libsvtav1` | `crf` | `preset` | `svtav1-params` includes `fast-decode=0…2` | +| `h264`, `hevc` (software) | `crf` | `preset` | `tune=fastdecode` if `fast_decode > 0` | +| `h264_videotoolbox`, `hevc_videotoolbox` | `q:v` (derived from `crf`) | — | — | +| `h264_nvenc`, `hevc_nvenc` | `rc` = `0`, `qp` ← `crf` | `preset` | — | +| `h264_vaapi` | `qp` ← `crf` | — | — | +| `h264_qsv` | `global_quality` ← `crf` | `preset` | — | --- diff --git a/src/lerobot/configs/video.py b/src/lerobot/configs/video.py index 803397c9d..91e42350d 100644 --- a/src/lerobot/configs/video.py +++ b/src/lerobot/configs/video.py @@ -210,7 +210,7 @@ class VideoEncoderConfig: if self.crf is not None: opts["q:v"] = max(1, min(100, 100 - self.crf * 2)) elif self.vcodec in ("h264_nvenc", "hevc_nvenc"): - opts["rc"] = "constqp" + opts["rc"] = 0 set_if("qp", self.crf) set_if("preset", self.preset) elif self.vcodec == "h264_vaapi": diff --git a/tests/datasets/test_video_encoding.py b/tests/datasets/test_video_encoding.py index 9c2fbf87f..ee423a022 100644 --- a/tests/datasets/test_video_encoding.py +++ b/tests/datasets/test_video_encoding.py @@ -90,10 +90,10 @@ class TestCodecOptions: def test_nvenc_options(self): cfg = VideoEncoderConfig(vcodec="h264_nvenc", g=2, crf=25, preset=None) opts = cfg.get_codec_options() - assert opts["rc"] == "constqp" + assert opts["rc"] == 0 assert opts["qp"] == 25 assert "crf" not in opts - assert "g" not in opts + assert opts["g"] == 2 @_require_encoder("h264_vaapi") def test_vaapi_options(self):