通过ffmpeg和directshow从USB Grabber捕获设备规格内的视频

问题描述 投票:-1回答:1

我正在使用USB Grabber(这个是http://www.logilink.com/Suche/vg0001a)来捕获一些旧的VHS素材。我将ffmpeg与directshow一起使用。设备属性如下:

[dshow @ 000001d57618a300] DirectShow video device options (from video devices)
[dshow @ 000001d57618a300]  Pin "Capture" (alternative pin name "0")
[dshow @ 000001d57618a300]   pixel_format=yuyv422  min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuyv422  min s=160x120 fps=5 max s=160x120 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuyv422  min s=176x144 fps=5 max s=176x144 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuyv422  min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuyv422  min s=352x288 fps=5 max s=352x288 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuyv422  min s=720x480 fps=5 max s=720x480 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuyv422  min s=720x576 fps=5 max s=720x576 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuv420p  min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuv420p  min s=160x120 fps=5 max s=160x120 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuv420p  min s=176x144 fps=5 max s=176x144 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuv420p  min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 000001d57618a300]   pixel_format=yuv420p  min s=352x288 fps=5 max s=352x288 fps=30
[dshow @ 000001d57618a300] Crossbar Switching Information for USB2.0 Grabber:
[dshow @ 000001d57618a300]   Crossbar Output pin 0: "Video Decoder" related output pin: 1 current input pin: 0 compatible input pins: 0 1
[dshow @ 000001d57618a300]   Crossbar Output pin 1: "Audio Decoder" related output pin: 0 current input pin: 4 compatible input pins: 3 4
[dshow @ 000001d57618a300]   Crossbar Input pin 0 - "Video Composite" related input pin: 4
[dshow @ 000001d57618a300]   Crossbar Input pin 1 - "S-Video" related input pin: 4
[dshow @ 000001d57618a300]   Crossbar Input pin 2 - "Video Tuner" related input pin: 3
[dshow @ 000001d57618a300]   Crossbar Input pin 3 - "Audio Tuner" related input pin: 2
[dshow @ 000001d57618a300]   Crossbar Input pin 4 - "Audio Line" related input pin: 0

我运行了一些测试,并且可以使用以下命令在yuv420p和yuyv422上以各种分辨率实时捕获并重新编码,效果很好:

ffmpeg -f dshow -pixel_format yuyv422 -video_size 720x480 -framerate 25 -i video="USB2.0 Grabber":audio="Digital Audio Interface (USB Audio Interface)" -c:v libx264 -crf 18 -aspect 4:3 -vf "yadif=1" -pix_fmt yuv420p -c:a aac -b:a 392k capture.mp4

但是,当我将-pixel_format yuyv422 -video_size 720x576 -framerate 25设置在设备规格范围内时,该过程失败,并显示Too many packets buffered for output stream 0:1.。我尝试使用-rtbufsize增加缓冲区大小,并且在过程开始时,从不捕获视频,并且在转换时帧数固定为零-捕获的音频很好。

我以为编码无法跟上,但是使用-vcodec copy传输视频或捕获原始视频提要时,我遇到了相同的问题。

仅当使用720x576作为尺寸时,使用VLC从捕获设备播放音频,而较低的分辨率才能正常播放,这使我认为问题出在设备上,还是我遗漏了一些特定的DirectShow选项。

有什么想法吗?

ffmpeg video-capture directshow video-encoding
1个回答
0
投票

我设法通过将DirectShow视频格式设置为PAL选项(默认情况下将其设置为NTSC)来解决此问题。我可以从另一个利用DirectShow捕获的应用程序中执行此操作,也可以直接使用-show_video_device_dialog true dshow选项从ffmpeg中执行此操作,这会导致GUI在转换过程之前出现。因为设置是粘性的,所以只需要执行一次。之后,可以很好地捕获720x576的视频。

© www.soinside.com 2019 - 2024. All rights reserved.