[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