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

Andrew Randrianasulu randrianasulu at gmail.com
Sun Dec 19 16:40:02 CET 2021


On Sunday, December 19, 2021, Terje J. Hanssen <terjejhanssen at gmail.com>
wrote:

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


good!

but a bit concerned 746 vs 745 frame count. Are we losing one frame
somewhere?

>
> 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 --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20211219/d924318a/attachment-0001.htm>


More information about the Cin mailing list