{"record":{"id":"74df867c33d21c7d","repo":"commaai/openpilot","slug":"usage-encoderd-clip-output-start-duration-bi","errorCode":null,"errorMessage":"usage: encoderd --clip OUTPUT START DURATION [--bitrate BPS] [--speedup N] [--metadata JSON] SEGMENT [SEGMENT ...]\n","messagePattern":"usage: encoderd --clip OUTPUT START DURATION \\[--bitrate BPS\\] \\[--speedup N\\] \\[--metadata JSON\\] SEGMENT \\[SEGMENT \\.\\.\\.\\]\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"openpilot/system/loggerd/encoderd.cc","lineNumber":184,"sourceCode":"  if (!streams.empty()) {\n    std::vector<std::thread> encoder_threads;\n    for (auto stream : streams) {\n      auto it = std::find_if(std::begin(cameras), std::end(cameras),\n                             [stream](auto &cam) { return cam.stream_type == stream; });\n      assert(it != std::end(cameras));\n      ++s.max_waiting;\n      encoder_threads.push_back(std::thread(encoder_thread, &s, *it));\n    }\n\n    for (auto &t : encoder_threads) t.join();\n  }\n}\n\nint main(int argc, char* argv[]) {\n#ifdef __COMMA_HARDWARE__\n  if (argc > 1 && std::string(argv[1]) == \"--clip\") {\n    if (argc < 6) {\n      fprintf(stderr, \"usage: encoderd --clip OUTPUT START DURATION [--bitrate BPS] [--speedup N] \"\n                      \"[--metadata JSON] SEGMENT [SEGMENT ...]\\n\");\n      return 2;\n    }\n    try {\n      int bitrate = 5'000'000;\n      int speedup = 1;\n      std::string metadata;\n      int input_arg = 5;\n      while (input_arg < argc && std::string(argv[input_arg]).rfind(\"--\", 0) == 0) {\n        const std::string option = argv[input_arg++];\n        if (option == \"--\") break;\n        if (input_arg == argc) throw std::invalid_argument(\"missing clip option value\");\n        if (option == \"--bitrate\") bitrate = std::stoi(argv[input_arg++]);\n        else if (option == \"--speedup\") speedup = std::stoi(argv[input_arg++]);\n        else if (option == \"--metadata\") metadata = argv[input_arg++];\n        else throw std::invalid_argument(\"unknown clip option: \" + option);\n      }\n      if (input_arg == argc) throw std::invalid_argument(\"missing clip input\");","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/commaai/openpilot/blob/516ec1e68203439a73f340f1d0b3b91eabc626ee/openpilot/system/loggerd/encoderd.cc#L166-L202","documentation":"Printed by encoderd's main() on comma hardware when invoked as `encoderd --clip ...` with fewer than 6 argv entries — the --clip subcommand needs at least OUTPUT START DURATION plus one SEGMENT (argv[0..5]). It exits with status 2 (usage error). All other arguments are optional flags (--bitrate, --speedup, --metadata) parsed after position 5.","triggerScenarios":"Running `encoderd --clip out.mp4 0` (missing DURATION and SEGMENT), `encoderd --clip out.mp4 10 5` (missing SEGMENT — argc==5 fails the <6 check), or forgetting OUTPUT entirely. Only reachable in builds with __COMMA_HARDWARE__ defined.","commonSituations":"Typos in clip-extraction wrapper scripts on a comma device, changing the argument order, or assuming SEGMENT is optional because DURATION already bounds the clip.","solutions":["Provide all four positionals: encoderd --clip OUTPUT START DURATION SEGMENT [SEGMENT ...], e.g. encoderd --clip clip.mp4 30 10 5 --speedup 2.","Note START/DURATION are std::stod-parsed seconds — pass numeric strings, not timestamps.","List multiple SEGMENT numbers consecutively (they are joined) instead of separate runs."],"exampleFix":"# before\nencoderd --clip clip.mp4 30 10        # argc=5 -> usage error, exit 2\n\n# after\nencoderd --clip clip.mp4 30 10 5      # OUTPUT START DURATION SEGMENT","handlingStrategy":"validation","validationCode":"#!/bin/sh\n# require: encoderd --clip OUTPUT START DURATION SEGMENT...\n[ $# -ge 4 ] || { echo 'need OUTPUT START DURATION SEGMENT'; exit 2; }\ncase \"$2\" in ''|*[!0-9.]*) echo 'START must be seconds'; exit 2;; esac\ncase \"$3\" in ''|*[!0-9.]*) echo 'DURATION must be seconds'; exit 2;; esac\nencoderd --clip \"$@\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Count arguments before calling: argc must be >= 6 including program and --clip.","Pass START/DURATION as numeric seconds and at least one SEGMENT number."],"tags":["cli","usage","encoderd","clip","openpilot"],"backgroundTag":null,"analyzedSha":"516ec1e68203439a73f340f1d0b3b91eabc626ee","analyzedAt":"2026-08-15T00:17:37.461Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}