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 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
One of the really good features of the C3 tracker is that propertyies are inherited through the hierarchy:
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
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.
scheduled
staterecording
or skippedCRS_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>
Mounts raw video segments via FUSE. Checks and sets cut marks, stores metadata like duration and framerate.
recording
→ preparing
statesee 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!
Validates cut marks, adds intro/outro clips if defined, and calculates cut durations. Fails tickets with incomplete data.
cut
statefinialized
state, updated with durations and metadata
Naming for intro and outro, all in /video/intros/<conference-acronym>/
:
<integer-event-id>.ts
outro.ts
Runs encoding tasks from job XML. Skips if Voctomix is detected. Supports VAAPI acceleration and logs execution times.
ready to encode
state, XML jobfile with ffmpeg commands encoded
script-E-postencoding-auphonic.pl
Runs audio processing and remuxing. Can optionally delegate to Auphonic for audio leveling and rendering.
encoded
statepostencoded
state, media file (MP4, …) with updated audio tracks and metadatasee checking
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.
postprocessing
state