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

Andrew Randrianasulu randrianasulu at gmail.com
Wed May 7 01:04:43 CEST 2025


ср, 7 мая 2025 г., 01:58 Terje J. Hanssen <terjejhanssen at gmail.com>:

>
>
> 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
>

But this is *after* they left ffmpeg ;)

All those auto-inserting filters may cut input stream according to that
user specified, and then expand it back, but with less info, so lossless
file will be smaller ....

just idea, not proven.

>
> 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 Examplehttps://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/623bd7ba/attachment-0001.htm>


More information about the Cin mailing list