[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