c3tracker:concepts

CRS Concepts

The C3 Ticket Tracker enables the (semi-)automated recording, editing & release of multilingual videos. In order to complete a release successfully, certain project settings must be configured and a few of the state transitions must be operated manually:

User accounts can have different roles depending on what the user should be able to do:

  • User - can cut and edit tickets
  • Restricted - can only use already defined actions and can't define new actions
  • Superuser - can edit profiles and (re)import fahrplan
  • Admin

more details on https://github.com/crs-tools/tracker/blob/master/src/Config/AccessControl.php

One of the really good features of the C3 tracker is that propertyies are inherited through the hierarchy:

  • Project settings (Conference or Series)
    • Meta ticket (Parent with Fahrplan-ID & -Metadata)
      • Recording ticket (Language, etc)
        1. Main encoding ticket (MP4)
        2. additional encoding tickets, e.g. WebM, MP3, Opus, SD formats, etc.

For each ticket type, the tracker has a predefined set of states, which can be enabled and disabled on an per project basis. Here is an example workflow with only one manual checking step:

c3tracker:states.png

This allows quite flexible pipelines, which are described in more detail in Project setup – for now lets focus on a typical one:

c3tracker:setup-central-storage.png

Let's look into the steps done by worker scripts

Worker A: Recording Scheduler

script-A-recording-scheduler.pl

Schedules and transitions tickets from scheduled via recording to recorded, optionally filters by room. Skips opt-out events, but does not perform any real task besides transitioning the recording ticket.

  • Inputs: CRS ticket in scheduled state
  • Outputs: Ticket moved to recording or skipped
  • Notes: Uses CRS_ROOM, Record.StartedBefore, and Record.EndedBefore filters

The actual recording is done by a bundlewrap configured systemd unit on the encoder which writes TS-Schnipsel to /video/capture/<conference-acronym>/<room>/, which are rsynced to storage. The “Schipsel” file names include the room name and recording timestamp as follows:

  <room>-YYYY-MM-DD_HH-MM-SS.<extension>

Worker B: Create virtual project files

script-B-mount4cut.pl

Mounts raw video segments via FUSE. Checks and sets cut marks, stores metadata like duration and framerate.

  • Inputs: Ticket in recordingpreparing state
  • Outputs: FUSE mount created and cut marks optionally stored
  • Notes: Supports DV and TS formats

Manual task by VOC crew: Cut

see cutting

The cutting process requires the operator to set start and end marks, using MLT-Video-Editor like Shotcut/Kdenlive but tooling accepts frame numbers via CLI. If your player does not show frame numbers you can approximate with the formula seconds * 25 assumed you have 25 frames per second. Note that this means you cut per second not per frame!

Worker C: Finalise recording ticket

script-C-cut-postprocessor.pl

Validates cut marks, adds intro/outro clips if defined, and calculates cut durations. Fails tickets with incomplete data.

  • Inputs: Ticket in cut state
  • Outputs: Ticket in finialized state, updated with durations and metadata
  • Notes: Verifies intro/outro file paths and presence

Naming for intro and outro, all in /video/intros/<conference-acronym>/:

  • Intro <integer-event-id>.ts
  • Outro: outro.ts
Worker D: Encoding

script-D-encoding.pl

Runs encoding tasks from job XML. Skips if Voctomix is detected. Supports VAAPI acceleration and logs execution times.

  • Inputs: Ticket in ready to encode state, XML jobfile with ffmpeg commands
  • Outputs: Encoded media file(s), ticket state updated to encoded
  • Notes: Uses CRS::Executor and task-type detection
Worker E: Postencoding

script-E-postencoding-auphonic.pl

Runs audio processing and remuxing. Can optionally delegate to Auphonic for audio leveling and rendering.

  • Inputs: Ticket in encoded state
  • Outputs: Ticket in postencoded state, media file (MP4, …) with updated audio tracks and metadata
  • Notes: Supports audio hash checking and production reuse

Manual task by VOC crew: Check

see checking

Worker F: Upload from Encoder (local) to Releasing host

script-F-postprocessing-upload.pl

Uploads processed files to the target via ssh from encoder/storage to releasing.c3voc.de. Can skip uploads based on host config.

  • Inputs: Ticket in postprocessing state
  • Outputs: Files pushed to publishing target
  • Notes: Validates file presence, honors opt-out and skip-hosts

Publishing

  • c3tracker/concepts.1750325640.txt.gz
  • Last modified: 2025/06/19 11:34
  • by andi