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 [2022/02/27 16:25] (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 18: | Line 22: | ||
+ | == Concepts | ||
- | == Usage during event | + | The C3 Ticket Tracker enables the (semi-)automated recording, editing & release of multilingual videos. In order to complete a release successfully, |
- | === Trackerfahrer Scripts | + | === Ticket types and hierarchy |
- | ``` | + | One of the really good features of the C3 tracker is that propertyies are inherited through the hierarchy: |
- | export VOC_WORKSPACE=~/ | + | |
- | export VOC_CUTTING_TOOL=shotcut | + | |
- | function voc_check() { | + | * Project settings |
- | if [ -z " | + | * Meta ticket (Parent with Fahrplan-ID & -Metadata) |
- | echo " | + | * Recording ticket (Language, etc) |
- | return 1 | + | |
- | fi | + | |
- | if [ ! -L " | + | |
- | echo "run voc_eventprep first!" | + | |
- | return 1 | + | |
- | fi | + | |
- | cd ~/voc | + | |
- | mpv " | + | |
- | cd - | + | |
- | } | + | |
- | function voc_cut() { | + | === Ticket states |
- | 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() { | + | 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: |
- | if [ ! -d "/ | + | |
- | echo "/ | + | {{drawio> |
- | return 1 | + | |
- | fi | + | |
- | sudo mount -t cifs // | + | == Usage during event |
- | sudo mount -t cifs // | + | |
- | } | + | |
- | ``` | + | |
=== Task: Cut | === Task: Cut | ||
Line 125: | Line 77: | ||
* Compare project properties with previous instalment of the same event | * Compare project properties with previous instalment of the same event | ||
- | optimal properties from current project | + | see [[c3tracker:setup]] for more details |
- | + | ||
- | ``` | + | |
- | 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:encoder|recording cubes]] or also rsync them to a central storage: | + | |
- | + | ||
- | + | ||
- | === 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 Roles | ||
Line 322: | Line 113: | ||
assumed you have 25 frames per second. Note that this means you cut per second not per frame !!! | assumed you have 25 frames per second. Note that this means you cut per second not per frame !!! | ||
+ | == Trackerfahrer Scripts | ||
+ | |||
+ | see [[scripts]] | ||
== Ticket Properties | == Ticket Properties | ||
- | ^ Property Name ^ Example Value ^ Comment | + | see [[properties]] |
- | ^ 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 | + |