[Cin] Is SD and HD 422 Video Capture obtainable with V4L(2)?

Terje J. Hanssen terjejhanssen at gmail.com
Sun Dec 19 15:33:15 CET 2021



Den 19.12.2021 03:38, skrev Andrew Randrianasulu:
>
>
> On Sunday, December 19, 2021, Terje J. Hanssen 
> <terjejhanssen at gmail.com <mailto:terjejhanssen at gmail.com>> wrote:
>
>
>
>     Den 19.12.2021 01:00, skrev Andrew Randrianasulu:
>>
>>
>>     On Sunday, December 19, 2021, Terje J. Hanssen
>>     <terjejhanssen at gmail.com <mailto:terjejhanssen at gmail.com>> wrote:
>>
>>
>>         [.......]
>>

>>
>>
>>                                     ===============
>>
>>                                     I-frame-only 50 Megabit MPEG-2 or
>>             comparable
>>                     DV50 in
>>                                 4:2:2 as
>>                                     high-end, "visually lossless"
>>             intermediate
>>                     format for
>>                                 archival and
>>                                     suited for editing?
>>
>>                                     -----------------
>>
>>                                     Regarding DV50, FFMpeg has a
>>             friendly "target
>>                     dv50"
>>                                 support
>>                                     (similar as "target DVD"). So to
>>             get a first
>>                     look on a
>>                                 DV50 test
>>                                     file, I simply transcoded
>>             422/10bit Video and PCM
>>                                 audio from a MOV
>>                                     file (ProRes 422HQ) to a raw DV50
>>             (422/8bit) file:
>>
>>                                         ffmpeg -i SD-MOV.mov -target
>>             pal-dv50
>>                     SD-DV50.dv
>>
>>                                     [......]
>>
>>
>>                                     205M SD-DV50.dv (ffmpeg
>>             re-encoded/remuxed)
>>                     AV-info:
>>
>>                                     avprobe SD-DV50.dv
>>                                     avprobe version 12.3, Copyright
>>             (c) 2007-2018 the
>>                                 Libav developers
>>                                       built on Mar 26 2018 12:39 with
>>             gcc 11 (SUSE
>>                     Linux)
>>                                     [dv @ 0x55cdddb96440] Estimating
>>             duration from
>>                                 bitrate, this may
>>                                     be inaccurate
>>                                     Input #0, dv, from 'SD-DV50.dv':
>>                                       Metadata:
>>                                         timecode        : 00:00:00:00
>>                                       Duration: 00:00:29.80, start:
>>             0.000000, bitrate:
>>                                 57600 kb/s
>>                                       Stream #0:0: Video: dvvideo,
>>             yuv422p,
>>                     720x576 [SAR
>>                                 16:15 DAR
>>                                     4:3], 25000 kb/s, 25 fps, 25 tbr,
>>             25 tbn, 25 tbc
>>                                       Stream #0:1: Audio: pcm_s16le,
>>             48000 Hz, stereo,
>>                                 s16, 1536 kb/s
>>                                       Stream #0:2: Audio: pcm_s16le,
>>             48000 Hz, stereo,
>>                                 s16, 1536 kb/s
>>                                     # avprobe output
>>
>>                                     ===================
>>
>>                                     As seen above, it looks like
>>             ffmpeg produced wrong
>>                                 meta data for
>>                                     the DV50 video bitrate (25
>>             Mb/s=DV25), while
>>                     the total
>>                                 bitrate
>>                                     57.6 Mb/s is correct. (Also
>>             similar was seen with
>>                                 ffprobe and
>>                                     Mediainfo).
>>
>>                                     My VLC player or Gnome
>>             movieplayer did not
>>                     playback
>>                                 the DV50 file,
>>                                     while ffplay did (as usual
>>             without audio?).
>>
>>                                     Cin-GG miss a DV50 preset among
>>             format setting.
>>                                 However DV50 else
>>                                     loades preliminary OK in Cin-GG
>>             (via ffmpeg).
>>
>>
>>                                 I'll look at dv50 output preset..
>>
>>                             Fine
>>
>>                         ===============
>>
>>                         I tried also to transcode and remux 422 Video
>>             and PCM
>>                     Audio to a
>>                         50 Mbps MPEG-2 I-frame only program stream.
>>
>>                         1) MPG From MOV (ProRes 422HQ)
>>                         ------------------------------
>>
>>                         ffmpeg -i SD-MOV.mov -c:v mpeg2video -bf 2
>>             -b:v 50M
>>                     -maxrate 50M
>>                         -minrate 50M -c:a pcm_s16be -f vob SD-MP2I-50.mpg
>>                         [....]
>>                         Stream mapping:
>>                           Stream #0:0 -> #0:0 (prores (native) ->
>>             mpeg2video (native))
>>                           Stream #0:1 -> #0:1 (pcm_s24le (native) ->
>>             pcm_s16be
>>                     (native))
>>                         Press [q] to stop, [?] for help
>>                         [mpeg2video @ 0x560ffd164ec0] Automatically
>>             choosing VBV
>>                     buffer
>>                         size of 746 kbyte
>>                         [vob @ 0x560ffd14d180] At most 8 channels
>>             allowed for LPCM
>>                     streams.
>>                         Could not write header for output file #0
>>             (incorrect codec
>>                         parameters ?): Invalid argument
>>                         Error initializing output stream 0:1 --
>>
>>                         ***This failed because PreRes Audio uses 16
>>             channels:***
>>
>>
>>                     yeah... interesting limitation.. and interesting
>>             number of
>>                     channels..
>>
>>
>>                         ffprobe SD-MOV.mov 2>&1 >/dev/null | grep
>>             Stream.*Audio
>>                           Stream #0:1(eng): Audio: pcm_s24le (lpcm /
>>             0x6D63706C),
>>                     48000
>>                         Hz, 16 channels, s32 (24 bit), 18432 kb/s
>>             (default)
>>
>>
>>                         2) MPG from DV50
>>                         ----------------
>>                         ffmpeg -i SD-DV50.dv -c:v mpeg2video -bf 2
>>             -b:v 50M
>>                     -maxrate 50M
>>                         -minrate 50M -c:a pcm_s16be -f vob SD-MP2I-50.mpg
>>
>>                         du -sh *
>>                         205M    SD-DV50.dv
>>                         284M    SD-MOV.mov
>>                         186M    SD-MP2I-50.mpg
>>
>>                         avprobe SD-MP2I-50.mpg
>>                         Input #0, mpeg, from 'SD-MP2I-50.mpg':
>>                           Duration: 00:00:29.77, start: 0.540000,
>>             bitrate: 52167 kb/s
>>                             Stream #0:0[0x1e0]: Video: mpeg2video
>>             (4:2:2), yuv422p(tv,
>>                         progressive), 720x576 [SAR 16:15 DAR 4:3],
>>             50000 kb/s, 25
>>                     fps, 25
>>                         tbr, 90k tbn, 50 tbc
>>                             Stream #0:1[0xa0]: Audio: pcm_dvd, 48000
>>             Hz, 2
>>                     channels, s16,
>>                         1536 kb/s
>>
>>                         ***** The SD-MP2I-50.mpg file size is here
>>             90% of DV50
>>                     ********
>>
>>                         The SD-MP2I-50.mpg playback ok with VLC,
>>             Gnome movieplayer,
>>                         ffplay, and loads and playback in Cin-GG
>>                         The audio volume seems low (weak), but can
>>             probably be
>>                     adjusted
>>                         higher with ffmpeg
>>
>>
>>                     well, but I missed keyframe parameter? bitrate is
>>             big but I
>>                     think without special param ffmpeg still will not
>>             make all-I
>>                     mpeg2 stream..?
>>
>>
>>
>>                 The first Video part of my ffmpeg script was based on
>>             this
>>                 standard FFmpeg Howto for
>>                 "MPEG-2 I-frame only Highest Quality Encoding", which
>>             didn't
>>                 include a keyframe parameter !?
>>             https://brunosan.eu/images/ffmpeg_howto.html#Encoding_MPEG-2_I-frame_only_in_Highest_Quality
>>             <https://brunosan.eu/images/ffmpeg_howto.html#Encoding_MPEG-2_I-frame_only_in_Highest_Quality>
>>                
>>             <https://brunosan.eu/images/ffmpeg_howto.html#Encoding_MPEG-2_I-frame_only_in_Highest_Quality
>>             <https://brunosan.eu/images/ffmpeg_howto.html#Encoding_MPEG-2_I-frame_only_in_Highest_Quality>>
>>
>>                 ffmpeg -i <input_file> -vcodec mpeg2video -pix_fmt
>>             yuv422p -qscale
>>                 1 -qmin 1 -intra -an output.m2v
>>
>>
>>             you missed
>>
>>             -intra?
>>
>>
>>         Thanks for reviewing. "-intra" should definitely be there,
>>         and I know I used it before editing and troubleshooting the
>>         audiopart, removing -an. Cleaned up and added also some other
>>         parameters
>>         -q:v 1 -qmin 1 -intra
>>
>>
>>         3) MP2I50 from DV50:
>>         ---------------------
>>         ffmpeg -i SD-DV50.dv -c:v mpeg2video -q:v 1 -qmin 1 -intra
>>         -bf 2 -b:v 50M -maxrate 50M -minrate 50M -c:a pcm_s16be -f
>>         vob SD-MP2I50.mpg
>>         [...]
>>         Input #0, dv, from 'SD-DV50.dv':
>>           Metadata:
>>             timecode        : 00:00:00:00
>>           Duration: 00:00:29.80, start: 0.000000, bitrate: 57600 kb/s
>>           Stream #0:0: Video: dvvideo, yuv422p, 720x576 [SAR 16:15
>>         DAR 4:3], 25000 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
>>           Stream #0:1: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
>>           Stream #0:2: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
>>         [... a lot of vob buffer messages scrolling ....]
>>         [vob @ 0x564dbf6a0680] packet too large, ignoring buffer
>>         limits to mux it
>>         [vob @ 0x564dbf6a0680] buffer underflow st=1 bufi=7204 size=7680
>>         frame=  745 fps=460 q=1.0 Lsize=  189584kB time=00:00:29.76
>>         bitrate=52186.6kbits/s speed=18.4x
>>         video:181698kB audio:5588kB subtitle:0kB other streams:0kB
>>         global headers:0kB muxing overhead: 1.227127%
>>
>>         avprobe SD-MP2I50.mpg
>>         avprobe version 12.3, Copyright (c) 2007-2018 the Libav
>>         developers
>>           built on Mar 26 2018 12:39 with gcc 7 (SUSE Linux)
>>         Input #0, mpeg, from 'SD-MP2I50.mpg':
>>           Duration: 00:00:29.80, start: 0.540000, bitrate: 52116 kb/s
>>             Stream #0:0[0x1e0]: Video: mpeg2video (4:2:2),
>>         yuv422p(tv, progressive), 720x576 [SAR 16:15 DAR 4:3], 50000
>>         kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
>>             Stream #0:1[0xa0]: Audio: pcm_dvd, 48000 Hz, 2 channels,
>>         s16, 1536 kb/s
>>
>>         ================
>>
>>         (Re)tested also with
>>
>>         4) No intra (-intra)
>>         ffmpeg -i SD-DV50.dv -c:v mpeg2video -bf 2 -b:v 50M -maxrate
>>         50M -minrate 50M -c:a pcm_s16be -f vob SD-MP2-50.mpg
>>
>>         5) Without specified Video bitrate (-b:v)
>>         ffmpeg -i SD-DV50.dv -c:v mpeg2video -q:v 1 -qmin 1 -intra
>>         -bf 2 -c:a pcm_s16be -f vob SD-MP2I-.mpg
>>
>>         6) Video only - no Audio (-an):
>>         ffmpeg -i SD-DV50.dv -vcodec mpeg2video -q:v 1 -qmin 1 -intra
>>         -an SD-MP2I50-an.m2v
>>
>>         -----------------
>>
>>         du -sh *
>>         284M    SD-MOV.mov
>>         205M    SD-DV50.dv
>>         186M    SD-MP2I50.mpg    (3)
>>         186M    SD-MP2-50.mpg    (4)
>>         153M    SD-MP2I-.mpg     (5)
>>         146M    SD-MP2I50-an.m2v (6)
>>
>>         As seen, no size difference between -intra (3) and without
>>         intra flag specified (4) above:
>>         186/205 = 90% size of the input SD-DV50.dv
>>
>>         I would expect this due to high bitrate and some more
>>         effectiv video compression for MPEG-2 over DV50.
>>         While the consumer DV25/4:2:0 pal uses 5:1 intra compression,
>>         the pro(sumer) DV50/4:2:2 uses lower 3.3:1.
>>
>>         -------------
>>
>>         7) Another, equivalent SD MPEG-2/ 422P at ML option to setup for
>>         Cin-GG/ FFMpeg preset could be:
>>
>>         D10 aka Sony IMX50 Encoding - a standard definition
>>         professional video recording format. Uses intraframe
>>         compression, 4:2:2 color subsampling and user-selectable
>>         constant video data rate of 30, 40 or 50 Mbit/s.
>>
>>         422P at ML  720 × 576 25 FPS 4:2:2 Sampling 50 Mbits/s
>>         Sony IMX50 (I only), Broadcast Contribution (I&P only)
>>
>>         The Howto contains both a short and a long script version.
>>
>>         ----------------
>>
>>
>>             ffmpeg changes cmd line and API quickly.. (
>>
>>             try "-g 1" and check keyframes with some linevlike those?
>>
>>             https://snippets.bentasker.co.uk/page-1707191206-Get-Video-Keyframe-Interval-(ffprobe)-BASH.html
>>             <https://snippets.bentasker.co.uk/page-1707191206-Get-Video-Keyframe-Interval-(ffprobe)-BASH.html>
>>             <https://snippets.bentasker.co.uk/page-1707191206-Get-Video-Keyframe-Interval-(ffprobe)-BASH.html
>>             <https://snippets.bentasker.co.uk/page-1707191206-Get-Video-Keyframe-Interval-(ffprobe)-BASH.html>>
>>
>>
>>         I tried to copy and paste some line from the manual url, but
>>         If you possibly can setup an exact FF syntax to run here, I
>>         can do it ;)
>>
>>
>>     attached copy of script Phyllis send to me back in 2019
>>
>
>     Sorry I'm not skilled with sed scripts. "Somewhere" I would expect
>     my encoded file name "SD-MP2I50.mpg" should be put in to be read
>     and analyzed with ffprobe? And what about the first mentioned "-g 1" ?
>
>
> try to run script like this (after chmod +x on it) :
>
>
> $ ./kfrm.sh vid_20210526.mp4
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'vid_20210526.mp4':
>   Metadata:
>     major_brand : isom
>     minor_version : 512
>     compatible_brands: isomiso2avc1mp41
>     encoder : Lavf58.76.100
>   Duration: 00:00:36.64, start: 0.000000, bitrate: 1314 kb/s
>   Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), 
> yuv420p(tv, unknown/bt470bg/unknown), 640x480 [SAR 27:64 DAR 9:16], 
> 1217 kb/s, 29.58 fps, 29.58 tbr, 11360 tbn, 59.17 tbc (default)
>     Metadata:
>       handler_name : VideoHandle
>       vendor_id : [0][0][0][0]
>   Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 
> stereo, fltp, 90 kb/s (default)
>     Metadata:
>       handler_name : SoundHandle
>       vendor_id : [0][0][0][0]
> key_frame=1
> key_frame=0
> key_frame=0
>
>
> for all I frames it should output key_frame=1 for all (many!) frames.
>
> you can add ' | grep 0' at the end of this line and see how many 
> non-keyframes it will find.
>
> -g is ffmpeg parameter setting distance between keyframes.
>
>
>
>     What are we really searching for or verify in this I-frame only
>     encoded MPEG-2 video file ?
>
>
> yes we try to verify it really all-I frames file. (impact seekability 
> among other things)
>
>
>
>     And isn't keyframes another (previous?) name for Intra-frames?
>
>
> yes, as far as I know.
>
>

Thanks, script testrun executed with attached output here.
     Test-run_Intra-frame_key_word

As seen below from the summary table, all files except the MPEG-2 
generated "SD-MP2-50.mpg" without the ffmpeg -intra flag set, contains 
all Intra-frames only:

-------------------------------------------------------
du -sh SD*.*            # key_frame=1    # key_frame=0
                 (# I-frames)    (# non-I-frames)
284M    SD-MOV.mov            746        0
205M    SD-DV50.dv            745        0
186M    SD-MP2I50.mpg            745        0
153M    SD-MP2I-.mpg            745        0
186M    SD-MP2-50.mpg             63        682
146M    SD-MP2I50-an.m2v        745        0

Counts matched # key_frame=1 (I-frames)
./kfrm.sh SD-MOV.mov | grep -c key_frame=1

Counts other (unmatched) than key_frame=1
./kfrm.sh SD-MOV.mov | grep -v -c key_frame=1

--------------------------------------------------------

-------------- next part --------------
du -sh SD*.*			# key_frame=1	# key_frame=0
				(# I-frames)	(# non-I-frames)
284M	SD-MOV.mov			746		0
205M	SD-DV50.dv			745		0
186M	SD-MP2I50.mpg			745		0
153M	SD-MP2I-.mpg			745		0
186M	SD-MP2-50.mpg			 63		682		
146M	SD-MP2I50-an.m2v		745		0

Counts matched # key_frame=1 (I-frames)
./kfrm.sh SD-MOV.mov | grep -c key_frame=1

Counts other (unmatched) than key_frame=1
./kfrm.sh SD-MOV.mov | grep -v -c key_frame=1

-------------------------

./kfrm.sh SD-MOV.mov | grep -c key_frame=1
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SD-MOV.mov':
  Metadata:
    creation_time   : 2016-02-26T02:24:01.000000Z
  Duration: 00:00:29.84, start: 0.000000, bitrate: 79620 kb/s
  Stream #0:0(eng): Video: prores (HQ) (apch / 0x68637061), yuv422p10le(tv, bt709/unknown/unknown, top coded first (swapped)), 720x576, 61154 kb/s, SAR 59:54 DAR 295:216, 25 fps, 25 tbr, 2500 tbn, 2500 tbc (default)
    Metadata:
      creation_time   : 2016-02-26T02:24:01.000000Z
      handler_name    : Apple Video Media Handler
      vendor_id       : appl
      encoder         : Apple ProRes 422 (HQ)
  Stream #0:1(eng): Audio: pcm_s24le (lpcm / 0x6D63706C), 48000 Hz, 16 channels, s32 (24 bit), 18432 kb/s (default)
    Metadata:
      creation_time   : 2016-02-26T02:24:01.000000Z
      handler_name    : Apple Sound Media Handler
      vendor_id       : [0][0][0][0]
746

./kfrm.sh SD-MOV.mov | grep -v -c key_frame=1
[....]
0

------------------

./kfrm.sh SD-DV50.dv | grep -c key_frame=1
[dv @ 0x55f35fc3f600] Estimating duration from bitrate, this may be inaccurate
Input #0, dv, from 'SD-DV50.dv':
  Metadata:
    timecode        : 00:00:00:00
  Duration: 00:00:29.80, start: 0.000000, bitrate: 57600 kb/s
  Stream #0:0: Video: dvvideo, yuv422p, 720x576 [SAR 16:15 DAR 4:3], 25000 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
  Stream #0:1: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
  Stream #0:2: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
745

./kfrm.sh SD-DV50.dv | grep -v -c key_frame=1
[...]
0
----------------

./kfrm.sh SD-MP2I50.mpg | grep -c key_frame=1
Input #0, mpeg, from 'SD-MP2I50.mpg':
  Duration: 00:00:29.80, start: 0.540000, bitrate: 52116 kb/s
  Stream #0:0[0x1e0]: Video: mpeg2video (4:2:2), yuv422p(tv, progressive), 720x576 [SAR 16:15 DAR 4:3], 50000 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
    Side data:
      cpb: bitrate max/min/avg: 50000000/0/0 buffer size: 6111232 vbv_delay: N/A
  Stream #0:1[0xa0]: Audio: pcm_dvd, 48000 Hz, 2 channels, s16, 1536 kb/s
745

./kfrm.sh SD-MP2I50.mpg | grep -v -c key_frame=1
[.....]
0

---------------

./kfrm.sh SD-MP2I-.mpg | grep -c key_frame=1
Input #0, mpeg, from 'SD-MP2I-.mpg':
  Duration: 00:00:29.80, start: 0.540000, bitrate: 43042 kb/s
  Stream #0:0[0x1e0]: Video: mpeg2video (4:2:2), yuv422p(tv, progressive), 720x576 [SAR 16:15 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 49152 vbv_delay: N/A
  Stream #0:1[0xa0]: Audio: pcm_dvd, 48000 Hz, 2 channels, s16, 1536 kb/s
745

./kfrm.sh SD-MP2I-.mpg | grep -v -c key_frame=1
[....]
0

-------------------------

./kfrm.sh SD-MP2-50.mpg | grep -c key_frame=1
Input #0, mpeg, from 'SD-MP2-50.mpg':
  Duration: 00:00:29.77, start: 0.540000, bitrate: 52167 kb/s
  Stream #0:0[0x1e0]: Video: mpeg2video (4:2:2), yuv422p(tv, progressive), 720x576 [SAR 16:15 DAR 4:3], 50000 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
    Side data:
      cpb: bitrate max/min/avg: 50000000/0/0 buffer size: 6111232 vbv_delay: N/A
  Stream #0:1[0xa0]: Audio: pcm_dvd, 48000 Hz, 2 channels, s16, 1536 kb/s
63

terje at localhost:/data/Video-test/SD-DV50_MP2I50> ./kfrm.sh SD-MP2-50.mpg | grep -v -c key_frame=1
[....]
682

--------------------------

./kfrm.sh SD-MP2I50-an.m2v | grep -c key_frame=1
Input #0, mpegvideo, from 'SD-MP2I50-an.m2v':
  Duration: N/A, bitrate: N/A
  Stream #0:0: Video: mpeg2video (4:2:2), yuv422p(tv, progressive), 720x576 [SAR 16:15 DAR 4:3], 25 fps, 25 tbr, 1200k tbn, 50 tbc
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 49152 vbv_delay: N/A
745

terje at localhost:/data/Video-test/SD-DV50_MP2I50> ./kfrm.sh SD-MP2I50-an.m2v | grep -v -c key_frame=1
[........]
0

----------------------------



More information about the Cin mailing list