Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revisionLast revisionBoth sides next revision | ||
c3tracker:start [2020/12/06 03:26] – c3tracker renamed to c3tracker:start andi | c3tracker:start [2022/02/27 15:01] – andi | ||
---|---|---|---|
Line 18: | Line 18: | ||
+ | == 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 73: | ||
* 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 109: | ||
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 | + |