C3Tracker: Repair

subpage of c3tracker

Es gibt verschiedene Arten von Defekten, sowie verschiedene Lösungsansätze:

Defekte Timestamps

Falls das Recording zu früh gestoppt, oder neu gestartet wurde kann es Probleme mit den Timestamps im TS geben. Dies äußert sich z.B. dadurch das Shotcut oder VLC beim Abspielen des uncut.ts keine Timestamps mehr anzeigt.

Kappute Schnipsel verschieben

Im einfachsten Fall reicht es die kaputten Schnipsel in einen Unterordner zu verschieben, das Recording Ticket im Tracker auf recorded zu setzen und es dadurch vom entsprechenden Worker neu, und dadurch ohne diese defekten Schnipsel, auf prepared setzen zu lassen.

Timestamps mit ffmpeg reparieren

Falls das nicht funktioniert kann man die Timestamps mit ffmpeg neu setzen und diese als repair-File (siehe 'Manually repairing a Recording') zu setzen.

“”

Zum Reparieren der Timestamps wird das vorhandene, aber “kaputte” uncut.ts aus dem Fusemount nochmal mit FFmpeg remuxed, das Recordingticket muss sich also mindestens im Status “prepared” befinden, wobei kein SourceReplacement gesetzt sein darf:

ffmpeg -i /video/event/room/1234/uncut.ts -c copy -f mpegts /video/tmp/event-repair/1234-remux.ts

Anschließend mit dem Reparaturprozess (nächster Abschnitt) fortfahren.

Manually repairing a Recording (TS)

Das reparierte Material wird im gleichen Format wie das Capture zur Verfügung gestellt, also MPEG2-TS mit 4 Audiospuren etc.pp. Dabei wird im Prozess zwar noch vor dem Schnitt eingesetzt, ein Abstecken mit KDEnlive erfolgt aber nicht nochmal. Das Material sollte also bereits zugeschnitten sein (siehe auch nächster Abschnitt). Allerdings darf das ersetzte Material nicht bereits Intro oder Outro beinhalten, da dies beim Encoding angefügt wird.

Die Vorgehensweise wird vom Tracker etwas unterstützt. Das Material ist als handelsübliche Videodatei (z.B. MPEG2-TS, h264 mp4) im Verzeichnis Processing.Path.Repair (Defaultwert, wenn nicht gesetzt: /video/tmp/<projektslug>/repair/) abzulegen. Dabei kann ein beliebiger Dateiname gewählt werden. Im Tracker muss dieser Dateiname (ohne den Pfad!) in die Property Record.SourceReplacement am zugehörigen Recording-Ticket eingetragen werden. Das Recording-Ticket ist anschließend auf den Status recorded zu setzen. Das Mount-Skript erkennt den Sonderfall der Reparatur, und statt eines Fuse-Mounts wird einfach ein Softlink gesetzt. Achtung hier ist zu beachten, dass die Encoder das Ziel des Softlinks ebenfalls erreichen können! Daher am Besten alles unter einem Verzeichnis, z.B. /video bereitstellen.

Direkt im Anschluss kann/muss das Ticket nochmal geschnitten werden, also den Cutting-Status durchlaufen. Es wird nur der Status im Tracker durchlaufen, ein Schnitt mit KDEnlive findet nicht statt. Hier wäre jetzt der richtige Moment, um z.B. falsch gesetzte Sprachen/Übersetzungen nochmal zu korrigieren.

Ab hier läuft dann die Pipeline ganz normal weiter.

Hints for repairing / manual cutting with KDEnlive

Die grundsätzliche Bedienung von KDEnlive wird hier nicht erklärt. Es ist zu beachten, dass KDEnlive (derzeit) nicht in der Lage ist, mehrere Video- oder Audiospuren zu exportieren. Für Slide-Video-Spuren oder übersetztes Audio muss man also mehrfach exportieren und die Dateien am Ende zu einer Repair- oder Masterdatei zusammenmuxen.

Ab ca. KDEnlive Version 17.x werden nicht mehr die vom MLT Framework mitgelieferten Exportprofile in der GUI zur Verfügung gestellt, sondern eine geringere Zahl von Profilen von KDEnlive selbst verwaltet. Es können custom Profile konfiguriert werden, diese werden in ~/.local/share/kdenlive/export/customprofiles.xml gespeichert. Ein Serviervorschlag ist wie folgt:

<profiles version="1">
<profile args="an=1 vcodec=libx264 threads=0 vpre=medium preset=medium vprofile=high vlevel=4.1 crf=19 g=250 bf=0 movflags=+faststart tune=stillimage" category="VOC" extension="mp4" name="VOC H.264 slide video track without audio"/>
<profile args="acodec=aac ab=128k vcodec=libx264 threads=0 vpre=medium preset=medium vprofile=high vlevel=4.1 crf=23 g=250 bf=2 movflags=+faststart" category="VOC" extension="mp4" name="VOC H.264 main video track with audio"/>
<profile args="f=mpegts acodec=mp2 ab=192k vcodec=mpeg2video intra=0 vb=0 g=5 bf=0 qscale=4 threads=0" category="VOC" extension="ts" name="VOC MPEG-2 recording-like export"/>
</profiles>

Achtung da die Software “nur” libavcodec und libavformat verwendet, ist die Angabe von Filtern im Exportprofil prinzipbedingt nicht möglich. Ein Denoising, wie es in der Pipeline für die Masterfiles gemacht wird, muss als Filter auf die entsprechenden Videostücken geklickt werden!

Convert to TS

(Not necessary for repairing)

The following ffmpeg call might be useful to convert to mpeg2 TS:

ffmpeg -v verbose -y \
-i input.mp4 \
-aspect 16:9 \
-map 0:v -filter:v scale=1920:1080 -c:v:0 mpeg2video -pix_fmt:v:0 yuv422p \
-qscale:v:0 2 -qmin:v:0 2 -qmax:v:0 7 -keyint_min 0 -bf:0 0 -g:0 25 -intra:0 -maxrate:0 90M \
-map 0:a -c:a mp2 -b:a 192k -ac:a 1 -ar:a 48000 \
-f mpegts output.ts

remux TS file

ffmpeg -v verbose -y \
-i $TALKID/uncut.ts \
-c copy \
-f mpegts /video/tmp/$EVENT/repair/${TALKID}_repair.ts

Audiospur bearbeiten

Beim Checken fällt auf, dass das Audio defekt ist z.B.

man möchte das Backup-Audio aus der zweiten Kamera-Audiospur nutzen, oder

Audio-Einspieler aus der Präsentation fehlt, hat hat die Datei aber vom Vortragenden bekommen und möchte das in das Release MP4 mit einbauen

Zunächst muss man die einzelnen Audiopuren so umwandeln das Audio-Schnitt Tool wie z.B. Reaper was damit anfangen kann (vor oder nach Auphnic):

ffmpeg -i 5100-hd-audio2-auphonic.m4a -vn -c:a copy -bsf:a aac_adtstoasc 5100-hd-audio2-auphonic-echt.m4a
ffmpeg -i 5100-hd-audio2-auphonic.m4a -vn -c:a copy -bsf:a aac_adtstoasc 5100-hd-audio2-auphonic-echt.m4a

Fertige Audiospur in Reaper o.ä. rausrechnen, z.B. als flac Datei.

Audiospur wieder in Vortrag MP4 einpacken:

ffmpeg -threads 0 -i /video/encoded/fossgis16/5100-hd-primary-audio-only.mp4 -i 5100-audio-fixed.flac -map 0:0 -map 1:0 -map_metadata 0 -c:v copy -c:a:0 aac -vbr 4 -ar:a:0 48000 -metadata:s:a:0 language=deu 5100-hd-fixed2.mp4

Copyright aus audio mit hilfe von YouTube entfernen

Copyright meldung im YT frontend öffen und “audio ersetzen” klicken

option wählen, die vorschlägt das audio zu entfernen

warten

ergebnis in YT probehören

audio von YT mit youtube-dl herunterladen:

youtube-dl -v -f 'bestaudio[ext=m4a]' Xyiczc061RQ

denkt an die translations!

heruntergeladenes audio in das master HD muxen

mit ffmpeg manuell:

ffmpeg -i 35c3-9999-eng-deu-spa-The_Enemy_hd.mp4 -i 9999-eng-rB9RDJxv71E.m4a -i 9999-deu-dDB7BWfnugs.m4a -i 9999-spa-Xyiczc061RQ.m4a -c copy -map '0:v' -map '1:a' -map '2:a' -map '3:a' 9999-hd-remux.mp4

oder direkt mit dem remux commando aus dem tracker jobfile das normalerweise fuer das auphonic remux verwendet wird

cd /opt/crs/tools/tracker3.0/

. ./tracker-profile.sh

ffmpeg zeile fuer das HD master ticket id holen: ./scripts/get-encode-commands.pl 60525

Achtung, die Nummer ist nicht die Fahrplan-ID sondern die Ticket-ID - einfach aus der URL vom Tracker nehmen

in der remux zeile die filenamen der audio spuren anpassen und laufen lassen

das entstandene HD-Master file in die pipeline tuen (ins tmp-Verzeichnis) und das Masterticket auf encoded setzen

anschließend (re)releasen (Publishing.YouTube.Enable am Ticket auf no setzen!), danach Subformate neu encoden und releasen

=== mit AvidemuxEtwas unsauber aber, falls es schnell gehen muss und eh nur nach YouTube veröffentlicht wird:

MP4 aus /video/encoded/<talk-id>.mp4 mit Avidemux öffnen.

Bereich suchen und markieren

Bereitsgrenze auf Keyframes legen

Bereich löschen

Fertiges Video in MP4 Container mit Video codec copy und Audio codec copy exportieren

/video/encoded/<talk-id>.mp4 umbennen und neue Datei da hin legen

Wie bem Checken fortfahren

Manually repairing a Recording (DV)

Old SD process, mostly irrelevant.

When a Recording needs manual fixing (muxing in another Audio Source, Cutting a Delay in the Middle, Adding a Note), you can manually generate a .dv-File and inject it into the Pipeline. This is also very useful when you have a special source (like a camera recording to a SD-Card) and want to inject that into the Pipeline.

Assuming you have separately generated a fixed version of a Talk as .dv (does not need to be perfectly cut), you can Upload it to your Storage to /video/…/repair/ (the exact path is controlled via the Processing.Path.Repair Project Property). It can have any name.

Now place a Record.SourceReplacement propery on the Recording-Ticket and reset it to the recorded-State. It will now be prepared from the repair-File instead of the Capture-Snippets. The repair-process will create a fuse-mount that needs to be cut again, at least inframe != 0 - this is very different from TS!

Cur the last second off a recording

When the outro has additional frames (bacause of a non empty output folder after a –debug run) the files can be shortened by downloading them from media and using the fowllowing script.

#!/bin/bash
EXT=".mp4"
for video in *${EXT}; do
echo "Processing $video"
DURATION=$(ffprobe -v quiet -print_format json -show_format $video | jq '.format.duration|tonumber')
DURATIONX2=$(ffprobe -v quiet -print_format json -show_format $video | jq '(.format.duration|tonumber)-1.3')
VIDEONAME=$(basename $video ${EXT})
REPAIRNAME=repair/${VIDEONAME}${EXT}
echo "OLD: $DURATION"
echo "NEW: ${DURATIONX2}"
echo ffmpeg -hide_banner -t $DURATIONX2 -i ${VIDEONAME}${EXT} -map 0 -c copy ${REPAIRNAME}
ffmpeg -hide_banner -t $DURATIONX2 -i ${VIDEONAME}${EXT} -map 0 -c copy ${REPAIRNAME}
done