问题标签 [fourcc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
153 浏览

python - Python CV2 视频编写器不保存视频

我有一个使用 OpenCV 和 Keras 的简单 python 代码,它对帧执行一些检测(从我之前的问题here跟进)。但是当我想使用 录制帧并将其保存为视频video_writer时,生成的视频是空的。

video_writer 有什么问题?

0 投票
0 回答
42 浏览

ffmpeg - 如何在ffmpeg中添加“dmb1”四个字符代码?

我正在尝试将视频从网络摄像头传输到本地计算机。该流的分辨率为 3840x2160 和 30fps。我使用的计算机是 Mac Pro。但是,当我使用下一个命令运行它时:

ffmpeg -f avfoundation -framerate 30 -video_size 3840x2160 -pix_fmt nv12 -probesize "50M" -i "0" -pix_fmt nv12 -preset ultrafast -vcodec libx264 -tune zerolatency -f mpegts udp://192.168.1.5:5100/mystream

它的延迟为 3-4 秒。这个问题在 Chromium 中不存在,当使用 MediaStream API 流实时显示时。

我相信这是因为 Chromium 支持“dmb1”四个字符代码:

要设置像素格式,Chromium 正在使用下一段代码:

我尝试通过更改 avfoundation.m 文件在 ffmpeg 中做同样的事情。首先我添加了新的像素格式AV_PIX_FMT_MJPEG

之后,我尝试对其进行硬编码:

代码编译成功,但是当我使用上面的命令运行它时,没有指定 -pix_fmt,程序在get_video_config函数中进入无限循环:

很明显,ffmpeg 无法加载第一帧。我的相机完全能够支持这种像素和流格式。我用这段代码证明了这一点,这段代码在 ffmpeg 选择用于指定宽度、高度和 fps 的格式之后:

上面的代码打印“选定格式:dmb1”。

有人能告诉我为什么 ffmpeg 无法加载第一帧以及如何在这个库中添加新的像素格式吗?

此外,任何关于如何以其他方式解决 3 秒输入延迟的建议都非常受欢迎。

编辑:

如果您尝试在 Chromium 中设置除 MJPEG 之外的任何其他像素格式,则延迟为 2 秒。当我说“设置”时,我的意思是更改 Chromium 源代码并重新编译它。我很确定问题出在像素格式上,因为相机正在发送 dmb1 而 ffmpeg 不知道该格式。

此外,延迟仅存在于 MacOS 上。