Freitag, 31. Juli 2015

Konvertierung Videos nach Matroska-Container mit FFV1 v3 Codec und WAV PCM



Als kleines Snippet:
ffmpeg -i inputvideo.webm -c:v ffv1 -level 3 -g 1 -coder 1 -context 1 -slices 16 -slicecrc 1 -report -c:a pcm_s32le -y outputvideo.mkv
Die Optionen kurz erklärt:
  • -i inputvideo.webm  – Lese von Video inputvideo.webm
  • -c:v ffv1– Verwende Videocodec FFV1
  • -level 3 – von diesem die Variante 3 (besonders für LZA geeignete Variante)
  • -g 1– Verwende GOP von 1 (group of pictures)
  • -coder 1– Verwende range-coder (ist 'ne Art arithmetischer Komprimierung)
  • -context 1 – Verwende größeren Kontext für Symbolkodierung
  • -slices 16 – Verwende 16 Slices, dh. jeder Frame wird in 16 Scheiben geschnitten, die je in einem Thread kodiert werden können
  • -slicecrc 1 – Füge CRC-Prüfsummen zu jedem Slice hinzu
  • -report – Schreibe alle Infos in ein Report-file
  • -c:a pcm_s32le – Verwende Audiocodec Wav-PCM signed 32bit little endian
  • -y – überschreibe vorhandene Datei ohne Rückfrage
  • outputvideo.mkv – Schreibe Video outputvideo.mkv
Weitere Infos zu den Parametern von FFV1 unter https://trac.ffmpeg.org/wiki/Encode/FFV1

 

Offene Fragen (Update 2015-08-03)

Nicht unterstütztes pcm-Format?

pcm_u24le wird von ffmpeg mit "[matroska @ 0x1a0adc0] No wav codec tag found for codec pcm_u32le" quittiert. Warum?

Matroska unterstützt diesen Codec nicht.

    Bedeutung der verschiedenen PCM-Subformate?

    Ist pcm_s24le Wave mit linear PCM oder linear differential PCM?

    Nach Antworten auf Nachfrage auf der FFMPEG-Mailingliste sieht es so aus, daß alle Formate linear PCM sind (nur in unterschiedlichen Codec Ausprägungen, bei signed int ist "Stille" definiert als Wert 0, bei unsigned int liegt "Stille" als Wert in der Hälfte des Wertebereiches).

    Von der Verwendung von float-Varianten wird abgeraten, da die bitgenaue Rekonstruktion bei unterschiedlichen Architekturen nicht sichergestellt ist.

    Montag, 20. Juli 2015

    Konfigurierbarer TIFF-Validator in Arbeit…

    Die bestehenden TIFF - Validatoren/Extraktoren, wie JHove und Co. sind zwar ganz nett, allerdings ist es schwierig unsere Policy abzufragen, sprich, welche Tags mit welchen Werten erlauben wir, welche sind Pflicht.

    Dies war die Geburtsstunde für einen konfigurierbaren Validator. Die Regeln werden in einer einfachen Abfragesprache formuliert, die der Validator übersetzt und danach das TIFF entsprechend auswertet.

    Es liegt noch etliche Arbeit vor uns, und einiges an Funktionalität fehlt noch. Dennoch möchten wir Euch auf das Tool hinweisen, damit ihr uns vlt. schon frühzeitig Rückmeldungen geben könnt.

    Den Quellcode gibt es hier: https://github.com/SLUB-digitalpreservation/fixit_tiff/tree/master/checkit, der Code steht unter der gleichen Lizenz, wie der der LibTIFF (sh. http://www.libtiff.org/)

    Hier ein Beispiel für eine einfache Abfrage:

    # tag; required; values
    #
    # works as whitelist
    # * tag: any tag number in TIFF
    # * required: mandatory | optional | depends( $tag.$value ) 
    # * values: range($start, $end) | logical_or( $a, …) | only($a) |any
    
    # This defines a sample config for baseline tiffs
    # Remember, because it works as whitelist for each required tag we need an
    # entry here
    
    #####
    # Required Baseline Tags
    #####
    
    # 256 0100 ImageWidth The number of columns in the image, i.e., the number of pixels per row.
    256; mandatory; range(1, 4294967295)
    
    # 257 0101 ImageLength The number of rows of pixels in the image.
    257; mandatory; range(1, 4294967295)
    
    # 258 0102 BitsPerSample Number of bits per component.
    ##########################258; mandatory; logical_or(8,16)
    # Bitonal is optional, grey & RGB is mandatory. If 262 AND 258 exist, then the values need to be in the specified range.
    258; depends(262.2); only(8,8,8)
    258; depends(258.any); logical_or(4, 8)
    
    # 259 0103 Compression Compression scheme used on the image data 
    ### (1 means no compression)
    259; mandatory; only(1)
    
    # 262 0106 PhotometricInterpretation The color space of the image data.
    ### 2 means RGB, 0 and 1 means bilevel or grayscale, 0 is unusual, 3 is Palette Color (FORBIDDEN), 4 is Transparency Mask (FORBIDDEN)
    262; mandatory; range(0, 2)
    
    # 273 0111 StripOffsets For each strip, the byte offset of that strip.
    273; mandatory; any
    
    # 277 0115 SamplesPerPixel The number of components per pixel.
    ### if RGB then 3 else 1
    ### Even though Baseline TIFF allows for SamplesPerPixel>3, we do NOT allow this for long term archival.
    277; depends(262.2); only(3)
    277; depends(262.1); only(1)
    277; depends(262.0); only(1)
    
    # 278 0116 RowsPerStrip The number of rows per strip.
    278; mandatory; range(1, 4294967295)
    
    # 279 0117 StripByteCounts For each strip, the number of bytes in the strip after compression.
    279; mandatory; range(1, 4294967295)
    
    # 282 011A XResolution The number of pixels per ResolutionUnit in the ImageWidth direction.
    282; mandatory; range(300, 1200)
    
    # 283 011B YResolution The number of pixels per ResolutionUnit in the ImageLength direction.
    283; mandatory; range(300, 1200)
    
    # 296 0128 ResolutionUnit The unit of measurement for XResolution and YResolution. 1 = No absolute unit of measurement. 2 = Inch. 3 = Centimeter. Default: 2
    296; mandatory; only(2)