我有一个小型的python程序,能够非常好地从fcmpeg中使用子过程在linux中捕获网络摄像机中的短视频(至少对于内置网络摄像头的笔记本电脑) 。如何在windows中使用ffmpeg抓取笔记本电脑的网络摄像头视频
现在我试图编写相同的程序来捕获Windows中的网络摄像头,我知道我不能使用在Linux中工作得很好的通用“/ dev/video0”,但我认为像命名它“集成摄像头”应该足够了,但是失败了。
这里是我的Linux代码(即工作):
import sys
from subprocess import call
from datetime import datetime
def record_webcam(seconds):
cam = '/dev/video0'
timestamp = datetime.now().strftime('%Y%m%d-%H%M%S')
filename = timestamp + 'something.mkv' #generated with more complexity in the actual code, but that isn't important
ffmpeg_cmd = 'ffmpeg -t {} -an -i {} -c:v libx264 -preset veryslow -crf 25 {}'.format(seconds, cam, filename).split()
p = call(ffmpeg_cmd)
return filename if p == 0 else False
if __name__ == '__main__':
record_webcam(sys.argv[1])
我已经看过了ffmpeg的文档,并试图寻找解决方案,但到目前为止,我迷路了......
我知道“集成相机”仅适用于某些笔记本电脑,而不适用于其他笔记本电脑,并且不会捕获其他连接的相机,但对于我的使用情况来说已足够了......但如果您想要挑战我也想知道如何不管它叫什么,都可以用相机将它应用到任何windows-pc上。
此外,是更容易或更建议做我在这里只用python工具,像OpenCV一样尝试?
在此先感谢! 编辑:如果有人有兴趣根据@Mulvya的评论回答我自己的问题,但如果任何人仍然可以向我解释关于OpenCV的部分,我仍然希望听到它...
跟进的问题在这里:ffmpeg through python subprocess fails to find camera
在Windows上,你将不得不使用要么[DSHOW](https://ffmpeg.org/ffmpeg- devices.html#dshow)或[gdigrab](https://ffmpeg.org/ffmpeg-devices.html#gdigrab)输入设备。 – Mulvya
尝试过,但它没有找到“集成相机”,我认为它也有一个与libx264编码混合的问题,但也许我错了。你能举出一个适用于任何摄像头的命令吗?或者至少*大多数*集成的? –
没有通用命令。阅读链接文档中的[示例](https://ffmpeg.org/ffmpeg-devices.html#Examples-2)。首先,您必须检查可用设备的列表,然后选择一个并捕获。使用x264编码没有问题。加入'-preset ultrafast -tune zerolatency'。 – Mulvya