Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
c3tracker:start [2020/12/06 03:26] – c3tracker renamed to c3tracker:start andi | c3tracker:start [2025/06/19 11:37] (current) – andi | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | = C3 Ticket Tracker | + | = CRS Ticket Tracker |
- | The C3 Ticket Tracker is the central managing component in our [[docu: | + | The Ticket Tracker is a web platform tracking process of video recording and ingest sources and video encoding progress. It guides users through manual processes like editing and checking and provides an API for scripts doing post processing and encoding. |
+ | |||
+ | The tracker is a PHP web application and distributes tasks in form of '// | ||
+ | |||
+ | The core system was initially written by [[:FeM]] for 27C3 in 2010, and was released under the Apache License 2.0 end of 2017. Our instance is deployed at https:// | ||
source code: | source code: | ||
Line 15: | Line 19: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
- | * [[https:// | ||
+ | == Ticket Properties | ||
+ | see [[properties]] | ||
- | == Usage during event | + | == Trackerfahrer Scripts |
- | === Trackerfahrer Scripts | + | see [[scripts]] |
- | ``` | ||
- | export VOC_WORKSPACE=~/ | ||
- | export VOC_CUTTING_TOOL=shotcut | ||
- | |||
- | function voc_check() { | ||
- | if [ -z " | ||
- | echo " | ||
- | return 1 | ||
- | fi | ||
- | if [ ! -L " | ||
- | echo "run voc_eventprep first!" | ||
- | return 1 | ||
- | fi | ||
- | cd ~/voc | ||
- | mpv " | ||
- | cd - | ||
- | } | ||
- | |||
- | function voc_cut() { | ||
- | if [ -z " | ||
- | echo " | ||
- | return 1 | ||
- | fi | ||
- | if [ ! -L " | ||
- | echo "run voc_eventprep first!" | ||
- | return 1 | ||
- | fi | ||
- | cd ~/voc | ||
- | case " | ||
- | shotcut) | ||
- | cp cut/ | ||
- | ln -vs " | ||
- | shotcut / | ||
- | rm / | ||
- | cp / | ||
- | rm / | ||
- | ;; | ||
- | kdenlive) | ||
- | kdenlive cut/ | ||
- | ;; | ||
- | *) | ||
- | cd - | ||
- | echo " | ||
- | return 1 | ||
- | esac | ||
- | cat cut/ | ||
- | cd - | ||
- | } | ||
- | |||
- | function voc_eventprep() { | ||
- | if [ -z " | ||
- | echo " | ||
- | return 1 | ||
- | fi | ||
- | if [ ! -d " | ||
- | mkdir -p " | ||
- | fi | ||
- | rm -f ~/ | ||
- | ln -s "/ | ||
- | ln -s "/ | ||
- | } | ||
- | |||
- | function voc_mount() { | ||
- | if [ ! -d "/ | ||
- | echo "/ | ||
- | return 1 | ||
- | fi | ||
- | sudo mount -t cifs // | ||
- | sudo mount -t cifs // | ||
- | } | ||
- | ``` | ||
- | |||
- | === Task: Cut | ||
- | |||
- | see [[operation: | ||
- | |||
- | {{c3_tracker_-_schnitt_mit_kdenlive.mp4}} | ||
- | * [[https:// | ||
- | |||
- | |||
- | * TODO: [[events: | ||
- | |||
- | === Task: Check | ||
- | |||
- | see [[operation: | ||
- | |||
- | |||
- | Ticket types and states | ||
- | |||
- | * Parent tickets for each [[: | ||
- | * one recording ticket for each parent | ||
- | * several encoding tickets, one for each format – e.g. MP4 HD, MP4 SD, WebM, MP3, Opus | ||
- | |||
- | |||
- | == Project setup | ||
- | |||
- | * Create tracker project (you can also clone a matching project to have prefilled properties) | ||
- | * Import schedule.xml | ||
- | * Set all master tickets from staging to staged via mass-edit | ||
- | * Adjust project properties, recommendations: | ||
- | * Compare project properties with previous instalment of the same event | ||
- | |||
- | optimal properties from current project | ||
- | |||
- | ``` | ||
- | Project | ||
- | Project.Slug eh19 | ||
- | Processing | ||
- | Processing.Loudnorm.Enable yes | ||
- | Processing.BasePath / | ||
- | Processing.Path.Intros / | ||
- | Processing.Path.Outro / | ||
- | Publishing | ||
- | Publishing.Path / | ||
- | Publishing.Upload.SkipSlaves speedy, | ||
- | Publishing.UploadOptions -i / | ||
- | Publishing.UploadTarget upload@releasing.c3voc.de:/ | ||
- | Publishing.Voctoweb.Enable yes | ||
- | Publishing.Voctoweb.Path / | ||
- | Publishing.Voctoweb.Thumbpath / | ||
- | Publishing.Voctoweb.Slug eh19 | ||
- | Publishing.Voctoweb.Tags easterhegg, | ||
- | Publishing.Voctoweb.Url https:// | ||
- | Publishing.YouTube.Category 27 | ||
- | Publishing.YouTube.Enable yes | ||
- | Publishing.YouTube.Privacy public | ||
- | Publishing.YouTube.Tags easterhegg, | ||
- | Publishing.YouTube.TitlePrefix Easterhegg 2019 - | ||
- | Publishing.YouTube.Token 1/ | ||
- | Publishing.Mastodon.Enable yes | ||
- | Publishing.Twitter.Enable yes | ||
- | Record | ||
- | Record.Container TS | ||
- | Record.Slides yes | ||
- | ``` | ||
- | == Pipeline setup during event | ||
- | |||
- | During event setup of the pipeline, you have to decide if you want leave the MPEG TS snippets only on the [[hardware: | ||
- | |||
- | |||
- | === centralised storage (rsync) (Variant 1) | ||
- | |||
- | The first variant is typically used for events with more than one room. For bigger events we use the dedicated [[hardware: | ||
- | For each encoderX open a screen tab on the central storage: | ||
- | cd / | ||
- | while true; do rsync -av --bwlimit=10000 --append --inplace -t encoderX.lan.c3voc.de:: | ||
- | |||
- | start tracker workers on storage | ||
- | cd / | ||
- | sudo ./ | ||
- | |||
- | Don't forget to the encoding tab and activate the encoding worker if you want the storage pc to also do some work. | ||
- | |||
- | ==== Minion setup | ||
- | To allow the encoding workers to do there job, they need to mount several folders on each minion: | ||
- | |||
- | sudo -s | ||
- | mount -t cifs // | ||
- | mount -t cifs // | ||
- | mount -t cifs // | ||
- | | ||
- | The first mount point is read-only, the other two are read-write. | ||
- | | ||
- | start tracker encoding workers | ||
- | cd / | ||
- | sudo ./ | ||
- | | ||
- | | ||
- | ==== Cube as worker setup | ||
- | |||
- | At small events, when the talks are finished for today, you can use the cubes to encoder master MP4 files. First: Stop voctocore. | ||
- | |||
- | The rest is very similar to above, but with different mounts so `/ | ||
- | |||
- | |||
- | sudo -s | ||
- | mount -t cifs -o password= // | ||
- | mount -t cifs -o password= // | ||
- | mount -t cifs -o password= // | ||
- | mount -t cifs -o password= // | ||
- | | ||
- | === decentralised classic (Variant 2) | ||
- | |||
- | The second variant is only practical if you have at least one release encoder (aka [[hardware: | ||
- | |||
- | For every worker: | ||
- | * set room filters in tracker | ||
- | |||
- | For every recoding cube: | ||
- | * start tracker workers | ||
- | cd / | ||
- | sudo ./ | ||
- | |||
- | |||
- | For each minion: | ||
- | |||
- | * mount filesystems from encoder cube | ||
- | |||
- | < | ||
- | e=echo | ||
- | if [ ! -d /video/tmp ]; then | ||
- | $e mount -t cifs -o password= // | ||
- | $e mount -t cifs -o password= // | ||
- | $e mount -t cifs -o password= // | ||
- | else | ||
- | echo " | ||
- | fi</ | ||
- | |||
- | * start tracker scripts for encoding | ||
- | |||
- | < | ||
- | cd / | ||
- | sudo ./ | ||
- | </ | ||
- | |||
- | |||
- | === decentralised pipeline (Variant 3) | ||
- | |||
- | Similar to variant 2, but the release encoder (minion) only mounts the / | ||
- | |||
- | You have to set the room filters only for the recording cubes, the minions can process talks independently. | ||
- | |||
- | Modify ''/ | ||
- | * On recording cubes: comment out steps '' | ||
- | * On release encoders: comment out steps '' | ||
- | |||
- | After modification, | ||
- | |||
- | sudo ./start screenrc-pipeline | ||
- | |||
- | |||
- | ==== Example with case 5 and 6: | ||
- | |||
- | on recording cube, without intros either copy or mount the intros from their source (here encoder6) | ||
- | |||
- | sudo mount -t cifs -o password= {// | ||
- | cd / | ||
- | sudo ./start screenrc-pipeline # with steps A, B and C | ||
- | |||
- | |||
- | on master minion (in this example minion5) | ||
- | ``` | ||
- | mount -t cifs -o password= // | ||
- | mount -t cifs -o password= // | ||
- | mount -t cifs -o password= // | ||
- | cd / | ||
- | sudo ./start screenrc-pipeline # with steps D, E, F | ||
- | |||
- | ``` | ||
- | //(ensure that samba is installed on this master minion)// | ||
- | |||
- | |||
- | on other minions | ||
- | ``` | ||
- | mount -t cifs -o password= {// | ||
- | mount -t cifs -o password= {// | ||
- | mount -t cifs // | ||
- | mount -t cifs -o password= // | ||
- | mount -t cifs -o password= // | ||
- | mount -t cifs -o password= {// | ||
- | cd / | ||
- | sudo ./start screenrc-encoding-only # only step E | ||
- | ``` | ||
- | |||
- | |||
- | === User Roles | ||
- | User accounts can have different roles depending on what the user should be able to do: | ||
- | * " | ||
- | * " | ||
- | * " | ||
- | * " | ||
- | |||
- | more details on https:// | ||
- | |||
- | |||
- | == Recording | ||
- | Files that should be handled by the tracker (input files) should be named as follows: | ||
- | < | ||
- | < | ||
- | </ | ||
- | |||
- | Files need to be placed in directories according to the room name | ||
- | < | ||
- | Note that names are stripped from frab and combined with the word " | ||
- | </ | ||
- | |||
- | Naming for intro and outro: | ||
- | * Intro < | ||
- | * Outro: outro.dv | ||
- | |||
- | == Postprocessing | ||
- | |||
- | === Cut | ||
- | The cutting process requires start and end marks. The tracker accepts frame numbers. 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 !!! | ||
- | |||
- | |||
- | == Ticket Properties | ||
- | ^ Property Name ^ Example Value ^ Comment | ||
- | ^ Meta | ||
- | | Meta.Album | ||
- | | Meta.License | ||
- | | Meta.Year | ||
- | ^ Processing | ||
- | | Processing.Auphonic.Enable | ||
- | | Processing.Auphonic.Preset | ||
- | | Processing.Auphonic.Token | ||
- | | Processing.Auphonic.SpeedLimit | ||
- | | Processing.Auphonic.ReuseProduction | ||
- | | Processing.Loudnorm.Enable | ||
- | | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
- | | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
- | | Processing.BasePath | ||
- | | Processing.Path.Capture | ||
- | | < | ||
- | | Processing.Path.Intros | ||
- | | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
- | | Processing.Intro.DurationNonAlpha | ||
- | | Processing.Outro.DurationAlpha | ||
- | | Processing.Path.Output | ||
- | | Processing.Path.Outro | ||
- | | Processing.Path.Raw | ||
- | | Processing.Path.Repair | ||
- | | Processing.Path.Tmp | ||
- | | Processing.Video.AspectRatio | ||
- | ^ Project | ||
- | | Project.Slug | ||
- | ^ Publishing | ||
- | | Publishing.Base.Url | ||
- | | Publishing.Url.Secret | ||
- | | Publishing.Url.Lifetime | ||
- | | Publishing.Voctoweb.Enable | ||
- | | Publishing.Voctoweb.Url | ||
- | | Publishing.Voctoweb.Tags | ||
- | | Publishing.Path | ||
- | | Publishing.Tags | ||
- | | Publishing.UploadOptions | ||
- | | Publishing.Upload.SkipSlaves | ||
- | | Publishing.UploadTarget | ||
- | | Publishing.YouTube.Enable | ||
- | | Publishing.YouTube.Privacy | ||
- | | Publishing.YouTube.Tags | ||
- | | Publishing.YouTube.Token | ||
- | | Publishing.YouTube.Playlists | ||
- | | Publishing.YouTube.TitlePrefixSpeakers | ||
- | ^ Fahrplan | ||
- | | Fahrplan.Abstract | ||
- | | Fahrplan.Date | ||
- | | Fahrplan.DateTime | ||
- | | Fahrplan.Day | ||
- | | Fahrplan.Duration | ||
- | | Fahrplan.GUID | ||
- | | Fahrplan.ID | ||
- | | Fahrplan.Language | ||
- | | Fahrplan.Person%%_%%list | ||
- | | Fahrplan.Persons | ||
- | | Fahrplan.Recording.Optout | ||
- | | Fahrplan.Room | ||
- | | Fahrplan.Slug | ||
- | | Fahrplan.Start | ||
- | | Fahrplan.Subtitle | ||
- | | Fahrplan.Title | ||
- | | Fahrplan.Track | ||
- | | Fahrplan.Type | ||
- | | Fahrplan.URL | ||
- | | ****Recording**** | ||
- | | Recording.Slides |