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

Andrew Randrianasulu randrianasulu at gmail.com
Sun Dec 19 03:38:07 CET 2021


On Sunday, December 19, 2021, Terje J. Hanssen <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>
> wrote:
>
>>
>>
>> Den 18.12.2021 04:35, skrev Andrew Randrianasulu:
>>
>>>
>>>
>>> On Saturday, December 18, 2021, Terje J. Hanssen <
>>> terjejhanssen at gmail.com <mailto:terjejhanssen at gmail.com>> wrote:
>>>
>>>
>>>
>>>     Den 17.12.2021 22:49, skrev Andrew Randrianasulu:
>>>
>>>
>>>
>>>         On Saturday, December 18, 2021, Terje J. Hanssen via Cin
>>>         <cin at lists.cinelerra-gg.org
>>>         <mailto:cin at lists.cinelerra-gg.org>
>>>         <mailto:cin at lists.cinelerra-gg.org
>>>         <mailto:cin at lists.cinelerra-gg.org>>> wrote:
>>>
>>>
>>>
>>>             Den 17.12.2021 15:00, skrev Terje J. Hanssen:
>>>
>>>
>>>                 Den 17.12.2021 04:58, skrev Andrew Randrianasulu:
>>>
>>>
>>>
>>>                     On Friday, December 17, 2021, Terje J. Hanssen
>>>                     <terjejhanssen at gmail.com
>>>         <mailto:terjejhanssen at gmail.com>
>>>         <mailto:terjejhanssen at gmail.com <mailto:terjejhanssen at gmail.com
>>> >>
>>>                     <mailto:terjejhanssen at gmail.com
>>>         <mailto:terjejhanssen at gmail.com>
>>>                     <mailto: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>
>>>
>>>     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>
>>>
>>>
>> 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.




>
>
>
>
>
>



>
>
>
>
>
>>
>>
>>>
>>>
>>>
>>>     I dropped -pix_fmt yuv422p when I saw it was detected and
>>>     automatic from the input file.
>>>
>>>
>>>     So I added the second PCM Audio part (similar I did for SD-DV)
>>>     according to 1. Answer at
>>>     https://stackoverflow.com/questions/48265448/mpeg-2-program-
>>> stream-w-pcm-audio
>>>     <https://stackoverflow.com/questions/48265448/mpeg-2-program
>>> -stream-w-pcm-audio>
>>>
>>>     FFmpeg only supports muxing 16 bit PCM in a MPEG2 PS. Use
>>>
>>>     ffmpeg -i "input.mov" \
>>>       -c:v mpeg2video -pix_fmt yuv422p -bf 2 -b:v 50M -maxrate 50M
>>>     -minrate 50M \
>>>       -s 1920x1080 -aspect 16:9 \
>>>       -c:a pcm_s16be -f vob "output.mpg"
>>>
>>>     The -f vob is needed to force a MPEG-2 PS, else ffmpeg will select
>>>     MPEG-1 Systems muxer.
>>>
>>>
>>>
>>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20211219/2d6d7a76/attachment-0001.htm>


More information about the Cin mailing list