[Cin] HDMI video streams to lossless compressed FFV1.MKV
Terje J. Hanssen
terjejhanssen at gmail.com
Wed May 7 20:55:12 CEST 2025
Den 07.05.2025 19:22, skrev Terje J. Hanssen:
>
>
> Den 07.05.2025 01:04, skrev Andrew Randrianasulu:
>>
>>
>> ср, 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.
>
> =================
>
> I continue testing now with my Sony HDR-FX7E HDV 1080i50 camcorder,
> currently using only the camera Enhanced Image processor (EIP) via
> HDMI out.
> That is not HDV tape (MPEG-2) playback yet as mentioned above.
>
> v4l2-ctl -V
> Format Video Capture:
> Width/Height : 1920/1080
> Pixel Format : 'YUYV' (YUYV 4:2:2)
> Field : None
> Bytes per Line : 3840
> Size Image : 4147200
> Colorspace : sRGB
> Transfer Function : Rec. 709
> YCbCr/HSV Encoding: ITU-R 601
> Quantization : Default (maps to Limited Range)
> Flags :
>
> NB! v4l2 discovers the camcorder FX7 EIP's (Enhanced Imaging
> Processor) FHD capability
>
> ------------
>
> ffmpeg -hide_banner -f v4l2 -list_formats all -i /dev/video0
>
> [video4linux2,v4l2 @ 0x561a655c36c0] Raw : yuyv422
> : YUYV 4:2:2 : 1920x1080 1600x1200 1360x768 1280x1024
> 1280x960 1280x720 1024x768 800x600 720x576 720x480 640x480
> [in#0 @ 0x561a655c3400] Error opening input: Immediate exit requested
> Error opening input file /dev/video0.
>
> 1) First encoding test:
> -----------------------------------
> ffmpeg -hide_banner -f v4l2 -input_format yuyv422 -video_size
> 1920x1080 -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
> 1920x1080_50fps_yuvy422+alsa_pcm_ffv1-3.mkv
>
> resulted i output file with 8-bit yuv422p as previously
>
>
> 2) Second encoding test:
> ----------------------------------------
> I specified 'y210' as both input format and as output pixel format.
> ffprobe below show this interestingly created a 10-bit "yuv422p10le"
> output file as I wanted, and with a bit larger file size than first
> test without output pixel_format filter!
>
> I wonder if this is better or a "fake" 10-bit color format?
> and wants comments to what really happends here:
>
> Is input via v4l2 a "raw camcorder video stream" that will be
> (re-)encoded to a ffv1.mkv video file format?
> And does specifying -vf format=pix_fmts='y210' cause some extra
> re-encoding than without specifying this output filter in this case?
>
>
> ffmpeg -hide_banner -f v4l2 -input_format y210 -video_size 1920x1080
> -framerate 50 -i /dev/video0 -f alsa -ac 2 -i hw:CARD=UHD,DEV=0 -c:v
> ffv1 -level 3 -vf format=pix_fmts='y210' -c:a pcm_s16le -t 10
> 1920x1080_50fps_y210+alsa_pcm_ffv1-3.mkv
>
> Input #0, video4linux2,v4l2, from '/dev/video0':
> Duration: N/A, start: 337.518694, bitrate: 1658880 kb/s
> Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422,
> 1920x1080, 1658880 kb/s, 50 fps, 50 tbr, 1000k tbn
> [aist#1:0/pcm_s16le @ 0x559f06e972c0] Guessed Channel Layout: stereo
> Input #1, alsa, from 'hw:CARD=UHD,DEV=0':
> Duration: N/A, start: 1746635575.463474, 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
> [ffv1 @ 0x559f06e7e280] bits_per_raw_sample > 8, forcing range coder
> Output #0, matroska, to '1920x1080_50fps_y210+alsa_pcm_ffv1-3.mkv':
> Metadata:
> encoder : Lavf61.7.100
> Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p10le(tv,
> progressive), 1920x1080, 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 @ 0x559f06e97500] video:383046KiB audio:1875KiB
> subtitle:0KiB other streams:0KiB global headers:0KiB muxing
> overhead: 0.010893%
> frame= 500 fps= 50 q=-0.0 Lsize= 384963KiB time=00:00:10.00
> bitrate=315361.7kbits/s speed=0.999x
>
>
> ---------------
>
> du -sh *.mkv
>
> 376M 1920x1080_50fps_y210+alsa_pcm_ffv1-3.mkv
> 374M 1920x1080_50fps_yuvy422+alsa_pcm_ffv1-3.mkv
> -----
> 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
>
>
> --------------------
>
> ffprobe -hide_banner 1920x1080_50fps_y210+alsa_pcm_ffv1-3.mkv
>
> Input #0, matroska,webm, from '1920x1080_50fps_y210+alsa_pcm_ffv1-3.mkv':
> Metadata:
> ENCODER : Lavf61.7.100
> Duration: 00:00:10.00, start: 0.000000, bitrate: 315361 kb/s
> Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p10le(tv,
> progressive), 1920x1080, 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
>
>
Just to add to the above
mediainfo says 10-bit:
Color space : YUV
Chroma subsampling : 4:2:2
Bit depth : 10 bits
VLC codec info says
Decoded format: Planar 4:2:2 YUV 10-bit LE
Playback seemingly works ok with VLC, mpv, Gnome mediaplayer and ffplay
> ============================
>
>
>
>>
>> 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/bcc71f47/attachment-0001.htm>
More information about the Cin
mailing list