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 Roles
User accounts can have different roles depending on what the user should be able to do:
User
- can cut and edit ticketsRestricted
- can only use already defined actions and can't define new actionsSuperuser
- can edit profiles and (re)import fahrplanAdmin
more details on https://github.com/crs-tools/tracker/blob/master/src/Config/AccessControl.php
Ticket types and hierarchy
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)
- Main encoding ticket (MP4)
- additional encoding tickets, e.g. WebM, MP3, Opus, SD formats, etc.
Ticket states and pipeline
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:
This allows quite flexible pipelines, which are described in more detail in Project setup – for now lets focus on a typical one:
Let's look into the steps done by worker scripts
Recording
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
, andRecord.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
Mounts raw video segments via FUSE. Checks and sets cut marks, stores metadata like duration and framerate.
- Inputs: Ticket in
recording
→preparing
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!
- Usage video YT link (german)
- TODO: CCCamp15 Recording / Postprocessing integrieren
Worker C: Finalise recording ticket
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
Encoding
Worker D: Encoding
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