чт, 9 мар. 2023 г., 20:36 Terje J. Hanssen <[email protected]>:
Den 09.03.2023 09:13, skrev Andrew Randrianasulu:
чт, 9 мар. 2023 г., 11:07 Terje J. Hanssen <[email protected]>:
Den 25.02.2023 21:30, skrev Andrew Randrianasulu:
сб, 25 февр. 2023 г., 23:25 Terje J. Hanssen <[email protected]>:
Den 25.02.2023 19:27, skrev Andrew Randrianasulu:
сб, 25 февр. 2023 г., 21:19 Terje J. Hanssen via Cin < [email protected]>:
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
----------------