Montag, 28. Mai 2018

Vim, Ersetzen von "foo" durch Dateinamen der zu bearbeitenden Datei

Manchmal, zB. bei der Erstellung von C++-Klassen möchte man bestimmte Textstellen durch Texte ersetzen, die aus dem Dateinamen der Datei gewonnen werden.

Will man zB. in der Datei "datei.txt" alle Vorkommen von "foo" durch "datei" ersetzen, gelingt dies in Vim im Kommandomodus so:

%s/foo/\=expand('%:r:t')/

Mit "\=" weist man Vim an, nicht direkt den Ersetzungstext zu verwenden, sondern ein Vim-Kommando auszuführen.

"expand" liest hier den Dateinamen aus "%" aus, wendet Prefix- und Suffix-Magie (":r:t") an und gibt den Ersetzungsstring zurück.


Dienstag, 7. März 2017

Geschafft!

So, ich habe es geschafft. Meine Masterarbeit wurde nun endlich korrigiert und ich darf sie nun veröffentlichen:

http://andreas-romeyke.de/bkm/


Das Studium neben dem Beruf wäre nicht möglich gewesen ohne die großartige Unterstützung meiner Familie, aber auch meiner Kollegen von der SLUB. Inbesondere möchte ich meinem Kollegen Jörg danken, mit dem ich viele Gedanken austauschen konnte.

Wer mehr über digitale Langzeitarchivierung von ihm und mir lesen möchte, der schaue mal bei Kulturreste vorbei. :)

Donnerstag, 16. Februar 2017

Rezept, Testdaten 4k 16bit RGB für FFV1 v3 erzeugen

Für Tests im Rahmen der digitalen Langzeitarchivierung von Videodaten benötige ich große Videofiles, um daran Validitätswerkzeuge und auch den Ingest zu überprüfen.

Für die Langzeitarchivierung empfiehlt sich Matroska als Containerformat und FFV1 als verlustfreier Codec. Dieser wird aktuell durch die Cellar-Group bei der IETF standardisiert.
FFV1 v3 kommt in der ffmpeg Version 3.2.4 mit 16-Bit Unterstützung.


Mehr zu FFV1 v3 auch im Nachgang der "No Time to Wait"-Konferenz.

Im Folgenden mein Script zur Generierung einer 1200s langen Videodatei. Diese enthält künstlich erzeugtes Rauschen um halbwegs die Realität widerzuspiegeln.

Hier das Script:

#!/bin/bash
# erzeugt Video im MKV/FFV1v3 Format

DURATION=1200
FRAMERATE=24
THREADS=8
PXFORMAT="rgb48le"
FRAMESIZE="3840x2160"

/tests/ffmpeg-3.2.4/ffmpeg \
  -loglevel verbose \
  -f lavfi \
  -i "mandelbrot=s=$FRAMESIZE:r=$FRAMERATE" \
  -pix_fmt $PXFORMAT \
  -t $DURATION \
  -vf noise=alls=5:allf=t \
  -vcodec ffv1 \
  -level 3 -threads $THREADS -coder 1 -context 1 -g 1 -slices 24 -slicecrc 1 \
  -strict experimental \
  test_$PXFORMAT.mkv

zzuf -b40- -c -r0.001 <test_$PXFORMAT.mkv >fuzzy_$PXFORMAT.mkv

echo "created mandelbrot video $DURATION s a $FRAMERATE fps with framesize \
$FRAMESIZE in pixelformat $PXFORMAT as file test_$PXFORMAT.mkv, also created \
a fuzzified variant with r=0.001 broken bits as file fuzzy_$PXFORMAT.mkv" | tee report.txt


Zudem wird noch eine gefuzzte Datei erzeugt, die künstliche Bitfehler enthält.

Die Datei wird in 4K-Auflösung erzeugt, das PXFORMAT=rgb48le definiert 16Bit pro RGB-Farbkanal, der Filter "-vf noise=alls=5:allf=t" erzeugt Gaussches Rauschen, welches pro Frame variert. Für FFV1 gibt Level 3 an, dass die Version 3 (für Langzeitarchivierung geeignet) verwendet werden soll. Es wird nur eine GOP=1 verwendet (-g 1), jedes Frame wird in 24 Slices geteilt, die jeweils durch CRC Prüfsummen gesichert sind.  Die Angabe "-strict experimental" schaltet die 16-Bit-Option für FFV1 frei.

Der Fuzzer zzuf überspringt die ersten 40 Bytes der Datei und erzeugt dann mit einer Rate von 0.001 fehlerhafte Bits.
Diese Datei wird später mit Validierungs- und Reparaturwerkzeugen verwendet, um die Robustheit des FFV1/MKV Gespanns zu testen.