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 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

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, 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 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!

c3_tracker_-_schnitt_mit_kdenlive.mp4

Usage video YT link (german)

TODO: CCCamp15 Recording / Postprocessing integrieren

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

Encoding

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

https://github.com/voc/voctopublish