[Cin] Analog S-Video or HDV capture via HDMI-USB to FFV1.mkv in realtime

Terje J. Hanssen terjejhanssen at gmail.com
Sat Feb 4 18:27:55 CET 2023



Den 02.02.2023 01:46, skrev Terje J. Hanssen:
> I have no plan to compete with our National Library located locally 
> here :)
> https://www-nrk-no.translate.goog/nordland/her-skal-den-norske-kulturarven-bevares-i-evig-tid-1.16277933?_x_tr_sl=no&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=sc
>
> but I prepare myself to test and use one method left with regards to 
> "Personal Video Archiving".
>
> Therefore I have ordered two selected, inexpensive devices (the urls 
> here are just for English language):
>
> 1) Capture Card USB HDMI 4K to 1080P USB-C adapter (Speedy USB 
> 3.2/3.1/3.0, 60 Hz and 1080p FHD.)
> https://www.turascandinavia.com/en/products/computer/microphone-webcam/webcams/74257
>
>   * Fluid video recordings without delays or distortions during live
>     streaming
>   * Linux not mentioned, but assumed this is a standard supported UVC.
>     OBS and VLC is mentioned.
>
>
> 2) Scart AV SV to HDMI Converter Switcher S Video Composite RCA DVD HD 
> TV adapter (3-4 weeks delivery time
> https://www.ebay.com.au/itm/295472602625
>
>   * The 3-in-1 S-/video/RCA/SCART to HDMI converter is a universal
>     converter for analog video input to HDMI output.
>   * Analog to digital converter (ADC), 10 bits maximum 1,62 MSPS
>     sampling,
>
>
>
> Q I have not yet found a definitiv ffmpeg FFV1 v 3 syntax guide for SD 
> and HDV capturing and hope for suggestions and comments here!?
>
> 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
>
>     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>
>
>


While awaiting the HDMI-USB3 capture dongle next week, I have tested to 
transcode a couple of video files to FFV1/MKV. In lack of available 
uncompressed 10-bit 422 video files (like v210), I have used two 
previous encoded 10-bit ProRes-422HQ (denoted visually or near lossless 
compression) as input files, to see what happens.

Input files:
------------
du -sh *.mov

    40G Hi8_tape_1_1992+1993.mov        # converted to SD from PAL
    analog Hi8/S-Video, Sony CCD-TR2000E
    1,7G    hd01.mov              # a short FHD clip from Sony FX7E
    camcorder directly via EIP & HDMI
                                             # The Imaging Processor
    works at 1920x1080 in a 4:2:2 colorspace.


ffmpeg -i Hi8_tape_1_1992+1993.mov 2>&1 >/dev/null | egrep 
"Video|Audio|Duration"
   Duration: 01:11:25.28, start: 0.000000, bitrate: 79566 kb/s
   Stream #0:0(eng): Video: prores (HQ) (apch / 0x68637061), 
yuv422p10le(tv, bt709/unknown/unknown, top coded first (swapped)), 
720x576, 61100 kb/s, SAR 59:54 DAR 295:216, 25 fps, 25 tbr, 2500 tbn, 
2500 tbc (default)
       handler_name    : Apple Video Media Handler
   Stream #0:1(eng): Audio: pcm_s24le (lpcm / 0x6D63706C), 48000 Hz, 
hexadecagonal, s32 (24 bit), 18432 kb/s (default)


ffmpeg -i hd01.mov 2>&1 >/dev/null | egrep "Video|Audio|Duration"
   Duration: 00:01:11.24, start: 0.000000, bitrate: 200607 kb/s
   Stream #0:0(eng): Video: prores (HQ) (apch / 0x68637061), 
yuv422p10le(tv, bt709/unknown/unknown, top coded first (swapped)), 
1920x1080, 182130 kb/s, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 2500 tbn, 2500 
tbc (default)
       handler_name    : Apple Video Media Handler
   Stream #0:1(eng): Audio: pcm_s24le (lpcm / 0x6D63706C), 48000 Hz, 
hexadecagonal, s32 (24 bit), 18432 kb/s (default)


Transcoding to FFV1/MKV:
------------------------

ffmpeg -i Hi8_tape_1_1992+1993.mov -acodec copy -vcodec ffv1 -level 3 
-threads 8 -coder 1 -context 1 -g 1 -slices 24 -slicecrc 1 
Hi8_tape_1_1992+1993_ffv1.mkv
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
   built with gcc 7 (SUSE Linux)
   ...................
[prores @ 0x5613af6cef40] error, wrong slice data size26.64 
bitrate=131749.8kbits/s speed=3.88x
[prores @ 0x5613af6cef40] error decoding picture header
Error while decoding stream #0:0: Invalid data found when processing input
frame=107131 fps= 95 q=-0.0 Lsize=70256226kB time=01:11:25.27 
bitrate=134306.1kbits/s speed=3.82x
video:60607655kB audio:9641880kB subtitle:0kB other streams:0kB global 
headers:0kB muxing overhead: 0.009525%

    # 18.5 minutes on a fast internal SSD nvme0n1 Samsung model: MZVPV512HDG
    # (26 minutes on a USB3 Expansion HDD Seagate, %CPU (top): 610-280,
    FFMpeg speed: 3.92x-2.68x)



ffmpeg -i hd01.mov -acodec copy -vcodec ffv1 -level 3 -threads 8 -coder 
1 -context 1 -g 1 -slices 24 -slicecrc 1 hd01_ffv1.mkv
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
   built with gcc 7 (SUSE Linux)
..............
frame= 1781 fps= 23 q=-0.0 Lsize= 4495998kB time=00:01:11.27 
bitrate=516733.5kbits/s speed=0.929x
video:4335507kB audio:160380kB subtitle:0kB other streams:0kB global 
headers:0kB muxing overhead: 0.002472%

     # ca. 2 minutes on a fast internal SSD nvme0n1 Samsung model: 
MZVPV512HDG


Output files:
-------------

du -sh *.mkv

    4,3G hd01_ffv1.mkv
    68G Hi8_tape_1_1992+1993_ffv1.mkv


ffmpeg -i Hi8_tape_1_1992+1993_ffv1.mkv 2>&1 >/dev/null | egrep 
"Video|Audio|Duration"
   Duration: 01:11:25.28, start: 0.000000, bitrate: 134306 kb/s
   Stream #0:0(eng): Video: ffv1 (FFV1 / 0x31564646), yuv422p10le(tv, 
bt709/unknown/unknown, top coded first (swapped)), 720x576, SAR 59:54 
DAR 295:216, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
       HANDLER_NAME    : Apple Video Media Handler
   Stream #0:1(eng): Audio: pcm_s24le, 48000 Hz, hexadecagonal, s32 (24 
bit), 18432 kb/s (default)


ffmpeg -i hd01_ffv1.mkv 2>&1 >/dev/null | egrep "Video|Audio|Duration"
   Duration: 00:01:11.28, start: 0.000000, bitrate: 516719 kb/s
   Stream #0:0(eng): Video: ffv1 (FFV1 / 0x31564646), yuv422p10le(tv, 
bt709/unknown/unknown, top coded first (swapped)), 1920x1080, SAR 1:1 
DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
       HANDLER_NAME    : Apple Video Media Handler
   Stream #0:1(eng): Audio: pcm_s24le, 48000 Hz, hexadecagonal, s32 (24 
bit), 18432 kb/s (default)


Summary and comments:
---------------------
As seen above the SD (Hi8) output FFV1.MKV file has grown with 78/ 40 = 
1.7 compared with the input ProRes.mov file,
while the HD output file has grown with 4.3/ 1.7 = 2.5  compared with 
the input ProRes.mov clip.

Possibly not as expected, but decoding the compressed ProRes first might 
not be optimum. At least I hope that encoding both from a common, 
lossless codec like v210 or more actual from an input video stream, 
would have shown another, closer picture?



> 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 -
>
>
>
> 4, Regarding FFV1 lossless compression in realtime
> Comparison tests (2013/2015) have shown that FFV1 produced the 
> smallest files at the fastest speed. It can be used to capture SD 
> material in realtime, and HD possibly, too. This according to a 
> 2012/2015 article, where I have extracted the results for FFV1 v.3 in 
> the tables below:
>
> http://www.av-rd.com/knowhow/video/comparison_video_codecs_containers.html#codec_tests
> NOTE: This is a consumer grade, off-the-shelf PC setup.
>
> Hardware:
> CPU: 	Intel(R) QuadCore(TM) i7-2600K CPU @ 3.40GHz
> RAM: 	8 GB
> Disk: 	Intel SSDSA2CW080G3 (SSD)
> Software:
> Operating System: 	GNU/Linux (Xubuntu 12.04.1, 64bit)
> Transcoding tool: 	FFmpeg (version git N-59183-g3e62654, Dec 17 2013)
>
>
> Video source file: 	VQEG reference video "football" 
> <http://media.xiph.org/video/derf/y4m/football_422_ntsc.y4m> (NTSC-SD, 
> 720x486px, 30fps, yuv422p, 8bpc)
> Codec 	Encoding 	Decoding 	Filesize 	% of uncompressed 	Implementation 
> 	Details
> FFV1 
> <http://www.av-rd.com/knowhow/video/comparison_video_codecs_containers.html#codec_ffv1> 
> (version 3) 	216 fps 	277 fps 	111 MiB 	46.1% 	libavcodec (FFmpeg) 
> <http://en.wikipedia.org/wiki/Libavcodec> 	log 
> <http://www.av-rd.com/knowhow/video/test_results/football-720x486i30/ffv1.3-libavcodec_ffmpeg_avi.log>, 
> framemd5 
> <http://www.av-rd.com/knowhow/video/test_results/football-720x486i30/ffv1.3-libavcodec_ffmpeg_avi.framemd5> 
>
>
>
>
> Video source file: 	SVT reference video "park joy" 
> <http://media.xiph.org/video/derf/y4m/park_joy_1080p50.y4m> 
> (full-HD/1080p, 1920x1080px, 50fps, yuv420p, 8bpc)
> Codec 	Encoding 	Decoding 	Filesize 	% of uncompressed 	Implementation 
> 	Details
> FFV1 
> <http://www.av-rd.com/knowhow/video/comparison_video_codecs_containers.html#codec_ffv1> 
> (version 3) 	31 fps 	63 fps 	879 MiB 	57.2% 	libavcodec (FFmpeg) 
> <http://en.wikipedia.org/wiki/Libavcodec> 	log 
> <http://www.av-rd.com/knowhow/video/test_results/park_joy-1920x1080p50/ffv1.3-libavcodec_ffmpeg_avi.log>, 
> framemd5 
> <http://www.av-rd.com/knowhow/video/test_results/park_joy-1920x1080p50/ffv1.3-libavcodec_ffmpeg_avi.framemd5> 
>
>
>
>
>
> PAL-SD 720x576 stored as YUV422, 10 bpc (bits per component), instead 
> of the tested 8 bpc above, seems to me would have enlarged the the 
> filesizes with about 25%, or to about 40 GB/hr with FFV1 lossless 
> compressed.
>
> Although the FFV1 compression results above obviously used yuv422p, 
> 8bps source SD and FHD files as input, it seems for me that the 
> encoding speeds at 216 fps and 31 fps for SD and FHD respectively, 
> assumingly should manage realtime FFV1 encoding and streaming of PAL 
> SD and HDV at 25 fps as well, especially with a faster i7-6700 x 8 
> cpu. Comments here?
>
>
> 5. Related 2021-[Cin] threads as background references
>
> [Cin] hdmi capture card (with v4l2)
> https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg02865.html
>
> [Cin] offtopic: Digitize and record Video with A/D USB adapters
> https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg03269.html
>
> [Cin] offtopic: HDMI capture
> https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg02084.html
>
> [Cin] Is SD and HD 422 Video Capture obtainable with V4L(2)?
> https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg03719.html
>
> [Cin] Uncompressed video to lossless compression FFV1/MKV
> https://www.mail-archive.com/cin@lists.cinelerra-gg.org/msg03791.html
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20230204/b6426e92/attachment-0001.htm>


More information about the Cin mailing list