[Cin] HDMI video streams to lossless compressed FFV1.MKV

Terje J. Hanssen terjejhanssen at gmail.com
Wed May 7 00:58:10 CEST 2025



Den 06.05.2025 22:54, skrev Andrew Randrianasulu:
>
>
> вт, 6 мая 2025 г., 23:49 Terje J. Hanssen <terjejhanssen at gmail.com>:
>
>
>
>     Den 05.05.2025 16:05, skrev Andrew Randrianasulu:
>>
>>
>>     пн, 5 мая 2025 г., 17:00 Andrew Randrianasulu
>>     <randrianasulu at gmail.com>:
>>
>>
>>
>>         пн, 5 мая 2025 г., 16:26 Terje J. Hanssen via Cin
>>         <cin at lists.cinelerra-gg.org>:
>>
>>             I consider to make a second preservation backup for
>>             archiving my Analog S-video and HDV footages on tapes to
>>             lossless compressed FFV1.MKV files stored on large USB3
>>             expansion disks. Also ffv1 HW (vulkan) decoding (next and
>>             encoding (later?) are of interest in this context.
>>
>>             Related previous threads
>>             https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg05547.html
>>             https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg03791.html
>>             https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg05547.html
>>
>>             I adapt simply the last ffmpeg mpeg-2 code line to a
>>             first ffv1, version 3 test, 10 sec file
>>
>>             ffmpeg -hide_banner -f v4l2 -input_format yuyv422
>>             -video_size 720x576 -framerate 50 -i /dev/video0 -f alsa
>>             -ac 2 -i hw:CARD=UHD,DEV=0 -c:v ffv1 -level 3 -c:a
>>             pcm_s16le -t 10 720x576_50fps+alsa_ms2130_ffv1-3+pcm.mkv
>>
>>                 Input #0, video4linux2,v4l2, from '/dev/video0':
>>                   Duration: N/A, start: 351.803278, bitrate: 331776 kb/s
>>                   Stream #0:0: Video: rawvideo (YUY2 / 0x32595559),
>>                 yuyv422, 720x576, 331776 kb/s, 50 fps, 50 tbr, 1000k tbn
>>                 [aist#1:0/pcm_s16le @ 0x555a99736cc0] Guessed Channel
>>                 Layout: stereo
>>                 Input #1, alsa, from 'hw:CARD=UHD,DEV=0':
>>                   Duration: N/A, start: 1746445045.742179, bitrate:
>>                 1536 kb/s
>>                   Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo,
>>                 s16, 1536 kb/s
>>                 Stream mapping:
>>                   Stream #0:0 -> #0:0 (rawvideo (native) -> ffv1
>>                 (native))
>>                   Stream #1:0 -> #0:1 (pcm_s16le (native) ->
>>                 pcm_s16le (native))
>>                 Press [q] to stop, [?] for help
>>                 Output #0, matroska, to
>>                 '720x576_50fps+alsa_ms2130_ffv1-3+pcm.mkv':
>>                   Metadata:
>>                     encoder         : Lavf61.7.100
>>                   Stream #0:0: Video: ffv1 (FFV1 / 0x31564646),
>>                 yuv422p(tv, progressive), 720x576, q=2-31, 200 kb/s,
>>                 50 fps, 1k tbn
>>                       Metadata:
>>                         encoder         : Lavc61.19.101 ffv1
>>                   Stream #0:1: Audio: pcm_s16le ([1][0][0][0] /
>>                 0x0001), 48000 Hz, stereo, s16, 1536 kb/s
>>                       Metadata:
>>                         encoder         : Lavc61.19.101 pcm_s16le
>>                 [out#0/matroska @ 0x555a99736f40] video:57467KiB
>>                 audio:1875KiB subtitle:0KiB other streams:0KiB global
>>                 headers:0KiB muxing overhead: 0.069226%
>>                 frame=  500 fps= 50 q=-0.0 Lsize=   59383KiB
>>                 time=00:00:10.00 bitrate=48646.9kbits/s speed=0.998x
>>
>>
>>             ----------
>>
>>             du -sh *
>>             58M 720x576_50fps+alsa_ms2130_ffv1-3+pcm.mkv
>>
>>             ----------
>>
>>             ffprobe -hide_banner 720x576_50fps+alsa_ms2130_ffv1-3+pcm.mkv
>>
>>                 Input #0, matroska,webm, from
>>                 '720x576_50fps+alsa_ms2130_ffv1-3+pcm.mkv':
>>                   Metadata:
>>                     ENCODER         : Lavf61.7.100
>>                   Duration: 00:00:10.00, start: 0.000000, bitrate:
>>                 48646 kb/s
>>                   Stream #0:0: Video: ffv1 (FFV1 / 0x31564646),
>>                 yuv422p(tv, progressive), 720x576, 50 fps, 50 tbr, 1k tbn
>>                       Metadata:
>>                         ENCODER         : Lavc61.19.101 ffv1
>>                         DURATION        : 00:00:10.000000000
>>                   Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2
>>                 channels, s16, 1536 kb/s
>>                       Metadata:
>>                         ENCODER         : Lavc61.19.101 pcm_s16le
>>                         DURATION        : 00:00:10.000000000
>>
>>
>>             ------------
>>
>>             mediainfo 720x576_50fps+alsa_ms2130_ffv1-3+pcm.mkv
>>
>>                 General
>>                 Unique ID : 158479793538002634101121179263279280827
>>                 (0x773A19163BEA6038DF448CE1529BB2BB)
>>                 Complete name                            :
>>                 720x576_50fps+alsa_ms2130_ffv1-3+pcm.mkv
>>                 Format                                   : Matroska
>>                 Format version : Version 4
>>                 File size : 58.0 MiB
>>                 Duration                                 : 10 s 0 ms
>>                 Overall bit rate mode                    : Variable
>>                 Overall bit rate                         : 48.6 Mb/s
>>                 Frame rate : 50.000 FPS
>>                 Writing application                      : Lavf61.7.100
>>                 Writing library                          : Lavf61.7.100
>>                 ErrorDetectionType                       : Per level 1
>>
>>                 Video
>>                 ID                                       : 1
>>                 Format                                   : FFV1
>>                 Format version : Version 3.4
>>                 Format settings, Slice count             : 4 slices
>>                 per frame
>>                 Codec ID : V_MS/VFW/FOURCC / FFV1
>>                 Duration                                 : 10 s 0 ms
>>                 Bit rate mode                            : Variable
>>                 Bit rate : 46.1 Mb/s
>>                 Width                                    : 720 pixels
>>                 Height                                   : 576 pixels
>>                 Display aspect ratio                     : 5:4
>>                 Frame rate mode                          : Constant
>>                 Frame rate : 50.000 FPS
>>                 Color space : YUV
>>                 Chroma subsampling : 4:2:2
>>                 Bit depth : 8 bits
>>                 Scan type : Progressive
>>                 Compression mode                         : Lossless
>>                 Bits/(Pixel*Frame)                       : 2.225
>>                 Stream size : 55.0 MiB (95%)
>>                 Writing library                          :
>>                 Lavc61.19.101 ffv1
>>                 Default                                  : No
>>                 Forced                                   : No
>>                 Color range : Limited
>>                 coder_type                               : Golomb Rice
>>                 ErrorDetectionType                       : Per slice
>>
>>                 Audio
>>                 ID                                       : 2
>>                 Format                                   : PCM
>>                 Format settings : Little / Signed
>>                 Codec ID : A_PCM/INT/LIT
>>                 Duration                                 : 10 s 0 ms
>>                 Bit rate mode                            : Constant
>>                 Bit rate : 1 536 kb/s
>>                 Channel(s)                               : 2 channels
>>                 Sampling rate                            : 48.0 kHz
>>                 Bit depth : 16 bits
>>                 Stream size : 1.83 MiB (3%)
>>                 Writing library                          :
>>                 Lavc61.19.101 pcm_s16le
>>                 Default                                  : No
>>                 Forced                                   : No
>>
>>             ---------------------------------
>>
>>             As seen above the "default" Chroma subsampling  is
>>             yuv422p or 4:2:2 with Bit depth: 8 bits
>>
>>             As ffv1 seemingly also does support yuv422p10le ffmpeg, I
>>             wonder if yuv422p is limited by the input from HDMI
>>             capture/AV converter?
>>             Can possibly yuv422p10le possibly be achieved by adding
>>             -pix_fmt 10 og similar syntax to the ffmpeg line?
>>
>>
>>         you can try  different -input_format, but I suspect 10bit
>>         video over v4l2 at best uncommon ... While hdmi itself
>>         supports 10bit digital signal, I suspect  non-pro capture
>>         devices usually limited to 8bit?
>>
>
>>     https://git.ffmpeg.org/gitweb/ffmpeg.git/blob/HEAD:/libavdevice/v4l2-common.c
>>
>>     I can't see 10bit yuy2 format listed here, so probably even if
>>     hw/driver support it ffmpeg will not ...
>
>     Yes, It seems this also is the case.
>     Even I got a few 10-bits "-input_format" y210 and p210 accepted by
>     ffmpeg, in both cases the output format "defaulted" to the same
>     'yuv422p'.
>     What also surprised me, the filesizes at the same time also was
>     reduced to 77%
>
>     du -sh *
>     45M    720x576_50fps_p210+alsa_ms2130_ffv1-3+pcm.mkv
>     45M    720x576_50fps_y210+alsa_ms2130_ffv1-3+pcm.mkv
>     58M    720x576_50fps_yuyv422+alsa_ms2130_ffv1-3+pcm.mkv
>
>
> I guess they 10 bit but 4:2:0 subsampling?

Noop, according to mediainfo all have

Color space                              : YUV
Chroma subsampling                       : 4:2:2
Bit depth                                : 8 bits

By the way, I acknowledge this limit at the hand.
10-Bit Video is recommended for Analog Tape Transfer due to color shades 
and branding
https://www.archivalworks.com/blog/10-bit-video-transfer

But I expect also 8-bit 422 transfer to FFV1 opt for some better quality 
than the current 8-bit 420 DV25 files (converted from PAL S-video) and 
the HDV.m2t backup files.
IMO direct playback of S-vdeo tapes has visual better brightness than 
the converted DV files.
It remains also to verify if playing 1080i50 HDV tapes via HDMI will be 
up-scaled to 422 and 720p, according to Steve Mullen' FX7 handbook.

To continue I copy with from my old, initial post at
https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg05547.html


Does all FFV1 level 3 versions work with lossless compression for 422 video?

I have not yet found a definitiv ffmpeg FFV1 v 3 syntax guide for SD and 
HDV capturing and hope for suggestions and comments regarding the 
examples below:


3.1 FFmpeg recipe (PAL) ffmpeg -i VIDEO_IN \ -c:v ffv1 -level 3 -coder 1 
-context 0 -slices 24 -slicecrc 1 \ -color_primaries bt470bg \ 
-color_trc bt709 \ -colorspace bt470bg \ -color_range mpeg \ -map 0 \ 
-top 1 \ -c:a copy \ -g 1 -pix_fmt + \ VIDEO_OUT.mkv 3.2 Reference 
Example https://trac.ffmpeg.org/wiki/Encode/FFV1#Examples     Copy audio 
"as-is" and use FFV1.3 as video codec.

     Parameters are 8 threads, coder=1, context=1, GOP-size=1, 24 slices 
and slice-CRC on:

     ffmpeg -i <input_video>     \         -acodec   copy          \ 
         -vcodec   ffv1 -level 3 \         -threads  8             \ 
         -coder    1             \         -context  1             \ 
         -g        1             \         -slices  24             \ 
         -slicecrc 1             \         <output_video> 3.3 Various 
Encoding examples for Video capture from USB camera /dev/video0:

ffmpeg -f v4l2 -framerate 25 -video_size 720x576 -i /dev/video0 
output_data.mkv ffmpeg -f v4l2 -framerate 25 -video_size 720x576 -i 
/dev/video0 -codec:v ffv1 -codec:a pcm_s16le \
     -f matroska  output_video.mkv


Check that video is captured properly using ffplay:

ffmpeg -ar 44100 -thread_queue_size 1024 -f alsa -i $AUDIO \     -r 25 
-thread_queue_size 1024 -i $VIDEO \     -codec copy -f matroska  - | ffplay


- Check the overall flow using ffplay before capturing:

ffmpeg -ar 44100 -thread_queue_size 1024 -f alsa -i $AUDIO \    
  -itsoffset -0.5 -r 25 -thread_queue_size 1024 -i $VIDEO \
     -filter_complex 'channelmap=FL-0' -filter_complex 
'crop=w=700:h=556:x=8:y=0' \
     -map 1:v  -map 0:a -codec:v ffv1 -codec:a pcm_s16le \     -f 
matroska  - | ffplay -




> why we can't have both ;) I mean, it all depend on hw, and now board 
> wired ... If there was relatively popular capture board I am sure 
> someone tried to push core linux kernel bits upstream ...
>
>
> but hw design is harder than it looks.
>
>
>
>
>>
>>
>>         But of course you better to doublecheck what v4l2 tools says ...
>>
>
>     So far no other  pixel formats found:
>
>     v4l2-ctl -V
>     Format Video Capture:
>         Width/Height      : 720/576
>         Pixel Format      : 'YUYV' (YUYV 4:2:2)
>         Field             : None
>         Bytes per Line    : 1440
>         Size Image        : 829440
>         Colorspace        : sRGB
>         Transfer Function : Rec. 709
>         YCbCr/HSV Encoding: ITU-R 601
>         Quantization      : Default (maps to Limited Range)
>         Flags             :
>
>
>
>>
>>         Sorry for "too generic" answer, few years ago I/we looked
>>         into "direct RF capture" and there getting 10bit signal was
>>         possible, with custom hardware, slow offline processing and
>>         invasive hoockup to VCR's internals.
>>
>
>     Similar I bought and captured a few ProRes422 HQ few files in 2016
>     with Blackmagic Design's HyperDeck Shuttle+AD miniconverter+SSD
>     recorder.
>     But some years later, BMD's fw support became EOL, and the devices
>     became non-working :(
>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>             -- 
>>             Cin mailing list
>>             Cin at lists.cinelerra-gg.org
>>             https://lists.cinelerra-gg.org/mailman/listinfo/cin
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20250507/b387fe32/attachment-0001.htm>


More information about the Cin mailing list