[FFmpeg-user] How to set I/O Formats and Framerates for Analog video Capture?

Terje J. Hanssen terjejhanssen at gmail.com
Sat Mar 25 00:09:59 EET 2023


So far I have converted and digitized analog PAL S-video 50i using a 
usual way to PAL DV25 with 4:2:2 chroma subsampling.
Now I want to try if some better Video quality can be achieved by using 
422 lossless ffv1 compressed encoding for archiving/preserving.

I continue this topic with a new thread here, on base of a long enough, 
previous thread with a generic description of the USB3 method, setup 2 
Analog:

    ffmpeg -hide_banner -f alsa -ac 2 -i hw:3 -f v4l2
         -framerate 25 -video_size 720x576 -i /dev/video2 -codec:v ffv1
         -level 3 -codec:a pcm_s16le -f matroska video-out_ffv1.mkv


Now I have also got the final hardware devices for USB3 capture:

  * ADC (Analog S-video to HDMI converter) and
  * MS2130 UHD capture card (HDMI/USB3)

https://lists.ffmpeg.org/pipermail/ffmpeg-user/2023-February/056080.html

To list my questions first, before the output details below:

Q1)
I hope for help to throw more light on how to set input and output 
formats, framerates and other parameters, preferably with ffmpeg command 
lines examples, preferably by commenting/editing mine below, as I have 
not found any definitive guide for this.

Q2)
The capture card supports YUY2 which apparantly is 8-bit color depth and 
yuyv422
Other AV parameters required/suggested and where?

Q3)
One issue as I see it, is that PAL video is 50i or 25 fps, while the 
capture card supports 60 fps, 50 fps, 30 fps.
As seen in the ffmpeg output samples below, 25 fps is changed to 30 fps.
Should I therefore set 50 fps on the input side and change this to 25 
fps and interlaced on the output side ?

Q4)
Are i.e  both the following Input parameters required?

    -f v4l2 -input_format yuyv422 -video_size 720x576 -framerate 50

and

    -i /dev/video2 -pix_fmt yuyv422 -vf scale=720:576 -filter:v fps=25


Q5)
The ADC converter possibly scales up 720x576 framesize to 1080p
How should this be verified and taken care of with ffmpeg?


Now some technical related info extracted from the hardware devices 
documentation:

ADC (S-video to HDMI converter) :

    The SCART to HDMI  converter is a universal converter for analog
    composite input to HDMI 1080p (60Hz) output. The analog to digital
    conversion in this module employs 10bit maximal 162MSPS  sampling,
    black/white level expansion, color transition improvements, dynamic
    range expansion, blue stretch, auto-detect and auto-convert the
    composite signal to 1080p (60Hz) output. SCART output video signal
    format: PAL (composite video + stereo Audio). No need to install
    drivers, portable, flexible, plug and play.
    * Provide advanced signal processiong with great precision, colors,
    resolutions and details.
    * Support PAL, NTSC3.58, NTSCC4.43, SECAM, PAL/M, PAL/N standard TV
    formats input.
    eBay url as a reference description (but not bought there):
    https://www.ebay.com/itm/295472602625


MS2130 UHD capture card (HDMI/USB3):

    4K HDMI mini Video Capture Card HDMI To USB 3.0 Game Record 1080P
    60FPS Output for PS4/5 Camera Laptop PC Live Streaming MS2130 YUY2
    Real USB 3.0 Fast Speed, 1080p 60fps YUY2 Full HD,Mini Portable,Plug
    and Play
    Support input resolution up to 4K at 30Hz;
    * Support output resolution up to 1080P at 60Hz YUY2;
    * Support 24/30/36bit deep color;
    * Support most acquisition software, such as VLC,OBS ,Amcap,
    Wirecast,Vmix,Potplayer,etc;
    * Support Windows,Android and MacOS;
    * Conform to USB Video and Audio UVC standards
    eBay url as a reference description (but not bought there):
    https://www.ebay.com/itm/394316094286



Linux system verification of the devices (just for the ms2130 capture 
card?):

dmesg | egrep "UVC|UHD"

    [    2.727780] usb 2-5: Product: USB3.0 UHD
    [    2.755718] hid-generic 0003:345F:2130.0005: hiddev97,hidraw4:
    USB HID v1.10 Device [MACROSILICON USB3.0 UHD] on
    usb-0000:00:14.0-5/input4
    [    5.041941] usb 1-11: Found UVC 1.00 device USB 2.0 Camera
    (0c45:6340)
    [    5.154331] usb 2-5: Found UVC 1.00 device USB3.0 UHD (345f:2130)



udevadm info  /dev/video2 | egrep 'DEVNAME|ID_V4L_PRODUCT'

    E: DEVNAME=/dev/video2
    E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD


cat /proc/asound/cards | grep UHD

      2 [UHD            ]: USB-Audio - USB3.0 UHD
                           MACROSILICON USB3.0 UHD at
    usb-0000:00:14.0-5, super speed


arecord -l | grep UHD

    card 3: UHD [USB3.0 UHD], device 0: USB Audio [USB Audio]



Extract the most relevant frame formats and framerates:

v4l2-ctl -D -d /dev/video2 --list-formats-ext

    Driver Info (not using libv4l2):
             Driver name   : uvcvideo
             Card type     : USB3.0 UHD: USB3.0 UHD
             Bus info      : usb-0000:00:14.0-5
             Driver version: 5.14.21
             Capabilities  : 0x84A00001
                     Video Capture
                     Metadata Capture
                     Streaming
                     Extended Pix Format
                     Device Capabilities
             Device Caps   : 0x04200001
                     Video Capture
                     Streaming
                     Extended Pix Format
    ioctl: VIDIOC_ENUM_FMT
             Index       : 0
             Type        : Video Capture
             Pixel Format: 'YUYV'
             Name        : YUYV 4:2:2
                     Size: Discrete 1920x1080
                             Interval: Discrete 0.017s (60.000 fps)
                             Interval: Discrete 0.020s (50.000 fps)
                             Interval: Discrete 0.033s (30.000 fps)
                             Interval: Discrete 0.050s (20.000 fps)
                             Interval: Discrete 0.100s (10.000 fps)
                     ............

                     Size: Discrete 1280x720
                             Interval: Discrete 0.017s (60.000 fps)
                             Interval: Discrete 0.020s (50.000 fps)
                             Interval: Discrete 0.033s (30.000 fps)
                             Interval: Discrete 0.050s (20.000 fps)
                             Interval: Discrete 0.100s (10.000 fps)
                     ...............

                     Size: Discrete 720x576
                             Interval: Discrete 0.017s (60.000 fps)
                             Interval: Discrete 0.020s (50.000 fps)
                             Interval: Discrete 0.033s (30.000 fps)
                             Interval: Discrete 0.050s (20.000 fps)
                             Interval: Discrete 0.100s (10.000 fps)
                    ................


    Extract the most relevant pixel formats:

    ffmpeg -hide_banner -pix_fmts | grep yuyv
    IO... yuyv422                3             16      8-8-8

    ffmpeg -hide_banner -pix_fmts | grep yuv42
    IO... yuv420p                3             12      8-8-8
    IO... yuv422p                3             16      8-8-8
    .............


Grab and show the input of a video4linux2 device:

ffplay -hide_banner -f v4l2 -framerate 25 -video_size 720x576 /dev/video2

    [video4linux2,v4l2 @ 0x7f8d5c000cc0] The driver changed the time per
    frame from 1/25 to 1/30
    Input #0, video4linux2,v4l2, from '/dev/video2':B sq=    0B f=0/0
       Duration: N/A, start: 785.547518, bitrate: 199065 kb/s
       Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422,
    720x576, 199065 kb/s, 30 fps, 30 tbr, 1000k tbn
      010 fd=   2 aq=    0KB vq=    0KB sq=    0B f=0/0



     ffplay -hide_banner -f v4l2 -framerate 25 -video_size hd1080 
/dev/video2

         [video4linux2,v4l2 @ 0x7f9040000cc0] The driver changed the
    time per frame from 1/25 to 1/30
         Input #0, video4linux2,v4l2, from '/dev/video2':B sq=    0B f=0/0
           Duration: N/A, start: 10481.959842, bitrate: 995328 kb/s
           Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422,
    1920x1080, 995328 kb/s, 30 fps, 30 tbr, 1000k tbn
         fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0


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

List supported formats for a video4linux2 device:

         ffplay -hide_banner -f v4l2 -list_formats all /dev/video2
         [video4linux2,v4l2 @ 0x7f8280000cc0] Raw       :     yuyv422
    :           YUYV 4:2:2 : 1920x1080 1600x1200 1360x768 1280x1024
    1280x960 1280x720 1024x768 800x600 720x576 720x480 640x480
         /dev/video2: Immediate exit requested
         nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0


Grab and record the input of a video4linux2 device, leave the frame rate 
and size as previously set:

ffmpeg -hide_banner -f v4l2 -input_format yuyv422 -video_size 720x576 
-framerate 25 -t 20 -i /dev/video2 out-720x576_ms2130.mpeg

    [video4linux2,v4l2 @ 0x556074085040] The driver changed the time per
    frame from 1/25 to 1/30
    Input #0, video4linux2,v4l2, from '/dev/video2':
       Duration: N/A, start: 1377.916708, bitrate: 199065 kb/s
       Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422,
    720x576, 199065 kb/s, 30 fps, 30 tbr, 1000k tbn
    Stream mapping:
       Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg1video (native))
    Press [q] to stop, [?] for help
    [mpeg @ 0x5560740a7a80] VBV buffer size not set, using default size
    of 230KB
    If you want the mpeg file to be compliant to some specification
    Like DVD, VCD or others, make sure you set the correct buffer size
    Output #0, mpeg, to 'out-720x576_ms2130.mpeg':
       Metadata:
         encoder         : Lavf59.27.100
       Stream #0:0: Video: mpeg1video, yuv420p(tv, progressive),
    720x576, q=2-31, 200 kb/s, 30 fps, 90k tbn
         Metadata:
           encoder         : Lavc59.37.100 mpeg1video
         Side data:
           cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0
    vbv_delay: N/A
    frame=  601 fps= 30 q=31.0 Lsize=    1694kB time=00:00:19.96
    bitrate= 695.0kbits/s speed=0.997x
    video:1679kB audio:0kB subtitle:0kB other streams:0kB global
    headers:0kB muxing overhead: 0.867047%

ffprobe -hide_banner out-720x576_ms2130.mpeg

    Input #0, mpeg, from 'out-720x576_ms2130.mpeg':
       Duration: 00:00:20.03, start: 0.533333, bitrate: 692 kb/s
       Stream #0:0[0x1e0]: Video: mpeg1video, yuv420p(tv), 720x576 [SAR
    1:1 DAR 5:4], 104857 kb/s, 30 fps, 30 tbr, 90k tbn










More information about the ffmpeg-user mailing list