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.


Samstag, 31. Dezember 2016

Schicht's Kochbuch Bd. 1

Dieser Tage hatte ich einen alten Artikel von mir gelesen, in dem ich aus "Schicht's Kochbuch" die Sachertorte vorgestellt habe.

Das alte Heftchen ist mittlerweile in einem erbärmlichen Zustand. Es besteht aus Holzschliff und das Papier zerfällt langsam (mehr darüber in http://www.spektrum.de/magazin/gefaehrdung-restaurierung-und-konservierung-von-schriftgut/822535).

Da ich über die Feiertage etwas Zeit hatte, habe ich mich hingesetzt und "Schicht's Kochbuch Bd. I" digitalisiert. Die Scandaten belegten ca. 1,2 GB.

Für das Postprocessing habe ich wie schon beim Dschiu-dschitsu Projekt das Programm Scantailor verwendet.

Die entstandenen TIFF-Seiten hatte ich diesmal doch via didjvu zu einem djvu-File konvertiert:

$> didjvu bundle -o Schichts_Kochbuch_Bd1.djvu *.tif

Mit ocrodjvu habe ich dann noch den OCR-Layer hinzugefügt:

$> ocrodjvu -l deu -e tesseract --in-place Schichts_Kochbuch_Bd1.djvu

Die Kompressionsrate ist beachtlich, aus knapp 98MB TIFF-Dateien entsteht eine nur 3.358.164 Byte große djvu-Datei (eine PDF-Datei wird ca. 19MB groß). Die Texte sind nahezu fehlerfrei von tesseract erkannt wurden.

Alles in allem brauchte ich für die ca. 77 Seiten knapp 10h für Digitalisierung und Nachbearbeitung.

Das Buch ist unter http://andreas-romeyke.de/Schichts_Kochbuch_Bd1.djvu zu finden.

Donnerstag, 29. Oktober 2015

Hilfe, ich verstehe nicht in welcher Auflösung ich scannen muß!

mindestens 2 Pixel Abstand zwischen Glyphen,
aber auch mindestens 2 Pixel für dünne
Bestandteile eines Glyphen

Allgemein

mit der Angabe dpi (dots per inch) definiert man die Auflösung eines digitalen Bildes. Man gibt an welcher Länge eine gewissen Anzahl von Pixeln eines Bildes entsprechen. In den Digitalisierungsrichtlinien zB. der DFG wird oft eine Auflösung von 300 dpi angegeben. Dies bezieht sich immer auf 1:1 Vorlagen, sprich, wenn Original und (digitale) Reproduktion die gleiche Größe besitzen. 300pi sind dann ein guter Kompromiß zwischen Dateigröße und Schärfegrad, bzw Nicht-mehr-Pixeligkeit beim 1:1 Druck.

Die Auflösung ist daher auch ein Maß der Ortsfrequenz des digitalen Bildes. Die Wahl der Scanauflösung bestimmt daher auch die Anfälligkeit des Digitalisats für Aliasing-Effekte in Abhängigkeit der Details des Originals.

Für die Berechnung gilt, wenn die Druckgröße von der Scangröße abweicht, wie dies zB. bei der Microverfilmung passiert oder bei Reproduktionsvergrößerungen, muß man etwas mehr genauer hinschauen.


                   Anzahl der Pixel
Auflösung = ----------------
                   Breite der Vorlage

Beispiel 1:1 Kopie

Liegt das Original in 10 x 10 inch vor und man möchte eine 1:1 Kopie im Druck darstellen, dann reichen die zB. bei der DFG angegebenen 300dpi, da dies dann 3000 x 3000 Pixeln entspricht.

 

Beispiel Bildschirmansicht

Viele Bildschirme kommen mit einer Auflösung von 100 dpi (früher 75 oder 90 dpi). Wenn man also ein Dokument 10x10 inch mit 300dpi gescannt hat, dann macht dies 3000x3000 pixel. Der Monitor kann aber nur 100dpi anzeigen, daher wird der Scan am Monitor mit je 3000dots/100 dpi = 30 inch Größe  angezeigt.

 

Beispiel Microfilm und Vergrößerung

wenn es sich um Microfilm handelt, wären 200dpi *erst recht* zuwenig. Die 300dpi wurden für eine 1:1 Repräsentation festgelegt.

Wenn Du vom Microfilm scannst, willst Du aber auf das Original vergrößern, dh.die notwendige DPI-Zahl ergibt sich aus der Zielgröße.

Ein Original der Größe 10x10 inch wurde auf Microfilm der Größe 0,1x0,1 inch verfilmt. Die Verfilmung soll gescannt werden, damit man Reproduktionen des Originals von 20x20 inch anfertigen kann.

Bei einer Druckauflösung von 300dpi müsste man also die 20x20 inch Reproduktion anfertigen. Das macht aber die 200fache (2x größer als Original und jenes 100x größer als Microverfilmung)  Vergrößerung der Microverfilmung aus, du brauchst daher  200*300dpi = 60.000dpi.

Ist auch logisch, denn wenn Du 0,1 inch mit zum Beispiel 200dpi scannen würdest, bekämst Du 200dpi * 0,1 inch = 20 Pixel heraus. Diese 20 Pixel würdest Du im Beispiel auf 20 inch verteilen, womit ein Pixel genau 1 inch groß wäre.

Wenn Du aber die 0,1 inch mit 60.000dpi scannst, bekommst Du 60.000dpi * 0,1 inch = 6000 pixel heraus, die  Du in der Vergrößerung auf 20 inch verteilst, was 6000dots/20inch = 300dpi Druckauflösung entspricht.