чт, 9 мар. 2023 г., 20:36 Terje J. Hanssen <terjejhanssen@gmail.com>:


Den 09.03.2023 09:13, skrev Andrew Randrianasulu:


чт, 9 мар. 2023 г., 11:07 Terje J. Hanssen <terjejhanssen@gmail.com>:


Den 25.02.2023 21:30, skrev Andrew Randrianasulu:


сб, 25 февр. 2023 г., 23:25 Terje J. Hanssen <terjejhanssen@gmail.com>:


Den 25.02.2023 19:27, skrev Andrew Randrianasulu:


сб, 25 февр. 2023 г., 21:19 Terje J. Hanssen via Cin <cin@lists.cinelerra-gg.org>:
So I have received the ms2130 HDMI-USB3 capture card. 
The A/D AV converter & SV-HDMI/adapter is not received so far, and I have not avialable my HDV camcorder (on service) to output HDMI video stream with.

Yet, I have initially run some verification tests on the ms2130 HDMI-USB3 UHD capture card alone, for what they are worth.

As "UHD" (and/or USB3) is mostly generic used to identify this card (while ms2130 almost not), the some output is piped and stripped with grep "UHD".

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

dmesg | grep UHD
[    2.798210] usb 2-5: Product: USB3.0 UHD
[    2.827772] 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
[    4.805554] usb 2-5: Found UVC 1.00 device USB3.0 UHD (345f:2130)


udevadm info  /dev/video* | egrep 'DEVNAME|ID_V4L_PRODUCT'
E: DEVNAME=/dev/video0
E: ID_V4L_PRODUCT=USB 2.0 Camera: HD 720P Webcam
E: DEVNAME=/dev/video1
E: ID_V4L_PRODUCT=USB 2.0 Camera: HD 720P Webcam
E: DEVNAME=/dev/video2
E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD
E: DEVNAME=/dev/video3
E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD


udevadm info  /dev/video* | egrep UHD
S: v4l/by-id/usb-MACROSILICON_USB3.0_UHD_20210623-video-index0
E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD
E: ID_MODEL=USB3.0_UHD
E: ID_MODEL_ENC=USB3.0\x20UHD
E: ID_SERIAL=MACROSILICON_USB3.0_UHD_20210623
E: DEVLINKS=/dev/v4l/by-id/usb-MACROSILICON_USB3.0_UHD_20210623-video-index0 /dev/v4l/by-path/pci-0000:00:14.0-usb-0:5:1.0-video-index0
S: v4l/by-id/usb-MACROSILICON_USB3.0_UHD_20210623-video-index1
E: ID_V4L_PRODUCT=USB3.0 UHD: USB3.0 UHD
E: ID_MODEL=USB3.0_UHD
E: ID_MODEL_ENC=USB3.0\x20UHD
E: ID_SERIAL=MACROSILICON_USB3.0_UHD_20210623
E: DEVLINKS=/dev/v4l/by-path/pci-0000:00:14.0-usb-0:5:1.0-video-index1 /dev/v4l/by-id/usb-MACROSILICON_USB3.0_UHD_20210623-video-index1


lsusb | grep UHD
Bus 002 Device 004: ID 345f:2130 MACROSILICON 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

ll /dev/video*
crw-rw----+ 1 root video 81, 0 feb.  25 14:15 /dev/video0
crw-rw----+ 1 root video 81, 1 feb.  25 14:15 /dev/video1
crw-rw----+ 1 root video 81, 2 feb.  25 14:15 /dev/video2
crw-rw----+ 1 root video 81, 3 feb.  25 14:15 /dev/video3

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

v4l2-ctl --list-devices
USB 2.0 Camera: HD 720P Webcam (usb-0000:00:14.0-11):
        /dev/video0
        /dev/video1

USB3.0 UHD: USB3.0 UHD (usb-0000:00:14.0-5):
        /dev/video2
        /dev/video3

-----------

v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUYV 4:2:2
                Size: Discrete 640x480
                        Interval: Discrete 0.030s (33.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 640x360
                        Interval: Discrete 0.030s (33.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
            ................
 Index       : 1
        Type        : Video Capture
        Pixel Format: 'MJPG' (compressed)
        Name        : Motion-JPEG
                Size: Discrete 640x480
                        Interval: Discrete 0.030s (33.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.030s (33.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 640x360
                        Interval: Discrete 0.030s (33.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                       ......................


As the above doesn't list any 1920x1080 resolution, I wonder if it list just format for the usb2 webcam and not for ms2130 capture card?


Yeah, looking at how webcam listed first it makes sense. Try to instruct v4l2-ctl to use another device? (my guess it will be "-d" switch but I can be wrong! Manyal or "--help" output is better guide ..)

Be aware that "v4l2-ctl --list-formats-ext" was the same (I think) as used for the previous ms2109 Hama card, and I thought formats for all connected devices were listed then.
Obviously there is a default (or first device) used, when no device is specified, so thank you for the tip.

By help of google and "superuser" I found out that actually both "-D -d /dev/video2" are needed to get both frame sizes and fps listed:

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)
               ................



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

Try also ffplay to 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


this one at least list all formats but not their framerates ...



ffplay -hide_banner -f v4l2 -list_formats all /dev/video3
[video4linux2,v4l2 @ 0x7f3bd0000cc0] ioctl(VIDIOC_G_INPUT): Inappropriate ioctl for device
/dev/video3: Inappropriate ioctl for device

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

I am not sure about what the following command really does, but it was described to

"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 -i /dev/video2 out_test.mpeg
    
[video4linux2,v4l2 @ 0x55c22212cfc0] Dequeued v4l2 buffer contains corrupted data (0 bytes).
Input #0, video4linux2,v4l2, from '/dev/video2':
  Duration: N/A, start: 0.000000, bitrate: 1990656 kb/s
  Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1920x1080, 1990656 kb/s, 60 fps, 60 tbr, 1000k tbn
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg1video (native))
Press [q] to stop, [?] for help
[video4linux2,v4l2 @ 0x55c22212cfc0] Dequeued v4l2 buffer contains corrupted data (0 bytes).
    Last message repeated 30 times
[mpeg @ 0x55c22214f800] 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_test.mpeg':
  Metadata:
    encoder         : Lavf59.27.100
  Stream #0:0: Video: mpeg1video, yuv420p(tv, progressive), 1920x1080, q=2-31, 200 kb/s, 60 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= 1628 fps= 60 q=2.0 Lsize=    4702kB time=03:13:19.68 bitrate=   3.3kbits/s speed= 427x       
video:4675kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.572162%
Exiting normally, received signal 2.


try 30 fps instead of 60?

Like this?
But shouldn't a 422 and not a 420 output format be created?

it seems in some cases ffmpeg not geared towards preserving most information, just picks up most commonly defined/first pixel format. Try mpeg2video as output codec, and/or specify pixel format (pix_fmt) more explicitly before output's filename?

Could you possibly examplify the latter?


I think I just theorized ffmpeg may try to get some info from alsa device file directly, as it tries with /dev/video. But I never tried this way, so I can be totally wrong!




If things work as hoped in another thread, I want to test if analog Hi8/S-video directly to digital DVD-Video.mpg and SD-BD-Video.mpg is possible.
That is bypass the extra step to DV format conversion and compression.

Also you can try 'copy' video codec and meet absolutely enormous test file.

   
ffmpeg -hide_banner -f v4l2 -input_format yuyv422 -video_size 1920x1080 -framerate 30 -t 10 -i /dev/video2 out_1920x1024.mpeg
[video4linux2,v4l2 @ 0x564d7d7c3040] Dequeued v4l2 buffer contains corrupted data (0 bytes).
Input #0, video4linux2,v4l2, from '/dev/video2':
  Duration: N/A, start: 0.000000, bitrate: 995328 kb/s
  Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1920x1080, 995328 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
[video4linux2,v4l2 @ 0x564d7d7c3040] Dequeued v4l2 buffer contains corrupted data (0 bytes).
    Last message repeated 30 times
[mpeg @ 0x564d7d7e5a80] 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_1920x1024.mpeg':
  Metadata:
    encoder         : Lavf59.27.100
  Stream #0:0: Video: mpeg1video, yuv420p(tv, progressive), 1920x1080, 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=  301 fps= 30 q=1.6 Lsize=     896kB time=06:56:05.30 bitrate=   0.3kbits/s speed=2.47e+03x    
video:890kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.710403%

-----------
ffprobe -hide_banner out_1920x1024.mpeg
Input #0, mpeg, from 'out_1920x1024.mpeg':
  Duration: 00:00:10.03, start: 24955.333333, bitrate: 731 kb/s
  Stream #0:0[0x1e0]: Video: mpeg1video, yuv420p(tv), 1920x1080 [SAR 1:1 DAR 16:9], 104857 kb/s, 30 fps, 30 tbr, 90k tbn

------------
mediainfo out_1920x1024.mpeg
General
Complete name                            : out_1920x1024.mpeg
Format                                   : MPEG-PS
File size                                : 896 KiB
Duration                                 : 10 s 33 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 732 kb/s

Video
ID                                       : 224 (0xE0)
Format                                   : MPEG Video
Format version                           : Version 1
Format settings, BVOP                    : No
Format settings, Matrix                  : Default
Format settings, GOP                     : N=12
Duration                                 : 10 s 33 ms
Bit rate mode                            : Variable
Bit rate                                 : 717 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Compression mode                         : Lossy
Bits/(Pixel*Frame)                       : 0.012
Time code of first frame                 : 00:00:00:00
Time code source                         : Group of pictures header
GOP, Open/Closed                         : Open
GOP, Open/Closed of first frame          : Closed
Stream size                              : 878 KiB (98%)


Alsa identifier for ms2130?

I'm ready to test with the analog camcorder connectedto A/D-adapter + ms210 capture, but first a question about the Alsa hw: identifier for the latter.

For the Hama ms2109 I used
    ffmpeg -f alsa -ac 2 -i hw:CARD=MS2109,DEV=0

For ms2130 UHD card

arecord -l
**** List of CAPTURE Hardware Devices ****
......
card 3: UHD [USB3.0 UHD], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

arecord -L
.....
sysdefault:CARD=UHD
    USB3.0 UHD, USB Audio
    Default Audio Device
front:CARD=UHD,DEV=0
    USB3.0 UHD, USB Audio
    Front output / input
Suggestion to

    ffmpeg -f alsa -ac 2 -i hw:?
===

just omit hw alsa part (but not -f alsa) so it defaults to sysdefault ? :)

also, try 3:0 (card 3, subdevice 0)

also, may be try /dev/snd/pcm*c devices


1) Test to generate a fake alsa audio file with ms2130
ffmpeg -hide_banner -f alsa -t 30 out.wav
Output #0, alsa, to 'out.wav':
Output file #0 does not contain any stream
That is, it doesn't work without identifying ms2130 card#3, because there ar sysdefaults for each card I expect

ffmpeg -hide_banner -f alsa -i hw:3 -t 30 out.wav
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, alsa, from 'hw:3':
  Duration: N/A, start: 1678372304.209057, bitrate: 1536 kb/s
  Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'out.wav':
  Metadata:
    ISFT            : Lavf59.27.100
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s
    Metadata:
      encoder         : Lavc59.37.100 pcm_s16le
size=    5625kB time=00:00:30.00 bitrate=1536.1kbits/s speed=   1x        
video:0kB audio:5625kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.001354%


ffprobe -hide_banner out.wav
Input #0, wav, from 'out.wav':
  Metadata:
    encoder         : Lavf59.27.100
  Duration: 00:00:30.00, bitrate: 1536 kb/s
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 2 channels, s16, 1536 kb/s
------------

2) Tests to generate fake Video with actual frame sizes and alsa audio  packaged as ff1.mkv
25 fps (pal) is automatically changed to supported 30 fps - I just wonder if that will matter drawback for future playback, editing etc?


Oh, I just hope it will change when you actually connect analog source to it .... but no idea how it will work :/ Sorry.



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 720x576_ms2130_ffv1.mkv

ffprobe -hide_banner 720x576_ms2130_ffv1.mkv
Input #0, matroska,webm, from '720x576_ms2130_ffv1.mkv':
  Metadata:
    ENCODER         : Lavf59.27.100
  Duration: 00:00:13.07, start: 0.000000, bitrate: 1028 kb/s
  Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p(tv, progressive), 720x576, 30 fps, 30 tbr, 1k tbn
    Metadata:
      ENCODER         : Lavc59.37.100 ffv1
      DURATION        : 00:00:13.066000000
  Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
    Metadata:
      ENCODER         : Lavc59.37.100 pcm_s16le
      DURATION        : 00:00:13.036000000
---------------

ffmpeg -hide_banner -f alsa -ac 2 -i hw:3 -f v4l2 -framerate 25 -video_size 1280x720 -i /dev/video2 -codec:v ffv1 -level 3 -codec:a pcm_s16le -f matroska 1280x720_ms2130_ffv1.mkv

ffprobe -hide_banner 1280x720_ms2130_ffv1.mkv
Input #0, matroska,webm, from '1280x720_ms2130_ffv1.mkv':
  Metadata:
    ENCODER         : Lavf59.27.100
  Duration: 08:51:10.37, start: 0.000000, bitrate: 0 kb/s
  Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p(tv, progressive), 1280x720, 30 fps, 30 tbr, 1k tbn
    Metadata:
      ENCODER         : Lavc59.37.100 ffv1
      DURATION        : 08:51:10.366000000
  Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
    Metadata:
      ENCODER         : Lavc59.37.100 pcm_s16le
      DURATION        : 00:00:11.924000000
-------------

ffmpeg -hide_banner -f alsa -ac 2 -i hw:3 -f v4l2 -framerate 25 -video_size 1920x1080 -i /dev/video2 -codec:v ffv1 -level 3 -codec:a pcm_s16le -f matroska 1920x1080_ms2130_ffv1.mkv

ffprobe -hide_banner 1920x1080_ms2130_ffv1.mkv
[matroska,webm @ 0x56077d8b8f00] Could not find codec parameters for stream 0 (Video: ffv1 (FFV1 / 0x31564646), none(tv, progressive), 1920x1080): unspecified pixel format
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0, matroska,webm, from '1920x1080_ms2130_ffv1.mkv':
  Metadata:
    ENCODER         : Lavf59.27.100
  Duration: 09:01:55.87, start: 0.000000, bitrate: 0 kb/s
  Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), none(tv, progressive), 1920x1080, 30 fps, 30 tbr, 1k tbn
    Metadata:
      ENCODER         : Lavc59.37.100 ffv1
      DURATION        : 09:01:55.866000000
  Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
    Metadata:
      ENCODER         : Lavc59.37.100 pcm_s16le
      DURATION        : 00:00:10.232000000
----------------