我正在尝试创建一个个人使用的GUI,它允许用户在不直接使用命令行的情况下自定义ffmpeg的录制和转换选项。目前,我正在学习ffmpeg中的不同参数和标志。
如果我最终问了一些愚蠢的问题,请提前道歉,我现在正在学习之旅中,不幸的是,并非所有这些信息都能以容易理解的方式在网上获得。
我有一个USB网络摄像头,报告有以下选项可用:
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=640x480 fps=5 max s=640x480 fps=30 (tv, bt470bg/bt709/unknown, topleft) chroma_location=topleft
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=352x288 fps=5 max s=352x288 fps=30
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=352x288 fps=5 max s=352x288 fps=30 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=320x240 fps=5 max s=320x240 fps=30 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=176x144 fps=5 max s=176x144 fps=30
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=176x144 fps=5 max s=176x144 fps=30 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=160x120 fps=5 max s=160x120 fps=30
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=160x120 fps=5 max s=160x120 fps=30 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=1280x1024 fps=5 max s=1280x1024 fps=9
[dshow @ 00000000003f9340] pixel_format=yuyv422 min s=1280x1024 fps=5 max s=1280x1024 fps=9 (tv, bt470bg/bt709/unknown, topleft)
我只想弄清楚我应该如何解释这一点,很抱歉我会问多个问题:
分辨率和fps都有最小值和最大值(对于每个选项)这一事实似乎意味着这两个参数是不可控制的变量,对吧?在实践中,fps根据亮度而变化,但分辨率却不是——假设视频成像设备(尤其是网络摄像头)没有可变分辨率是否安全?
其次,为什么每个选项都列出两次,除了其中一半指定了额外的信息,如color_range、color_space和chroma_location?这只是个怪癖吗?当然,这些额外的参数选项不应该被丢弃吗?
很难知道如何理解这一点,但或者举个例子:事实上;电视";这是否意味着网络摄像头只能在有限的颜色范围内工作,而试图从中获得完整的0255是没有意义的?我在某个地方读到";pc";意味着0-255的全范围;电视";意味着的范围为16-235
关于颜色空间,是否可以将网络摄像头记录为原始(未编码),然后稍后转换为不同的颜色空间?处理颜色空间的哪种方法产生的颜色损失最小?我以前唯一一次使用颜色空间的经验是在图像领域,例如,将sRGB转换为ROM16RGB是没有意义的,因为你要使用的颜色空间覆盖范围更广,而且不会凭空产生额外的颜色,所以你想从原始到颜色空间转换一次,然后避免在颜色空间之间转换。此外,什么是";未知";平均在颜色空间选项?
以下是我所做的一些研究/测试的高潮,我在下面所做的结论和假设中有什么正确或严重错误的地方吗?
我对pixel_format的理解如下:当你录制时(甚至是原始的),你可以使用类似于"-pixel_ format yuyv422";,这是一个";包装";,而不是";平面的";格式,由网络摄像头生成。当您使用libx264从raw转换为类似mkv的东西时,您不能指定一个"包装的";像素格式,例如";yuyv422";,而是必须使用适当的平面对应物;yuv422p";,这将使用"-pix_fmt yuv422p";。
我对网络摄像头进行了原始录制(在黑暗中录制了明亮的光线),我没有在上面的括号中设置任何选项。然后我使用libx264转换了这个视频-dst_range1-color_range2";我在网上其他地方看到的。
使用vlc对这段视频进行截图,并将其通过imagemagik identify-verbose,显示截图的颜色范围为0255,至于视频本身,";MediaInfo";报告";颜色范围:全";,VLC的编解码器信息说";解码格式:平面4:2:2 YUV全比例-这些信息有价值吗,还是只是视频标记的元数据?
起初,我对imagemagick的颜色范围报告感到高兴,但现在我想,0255范围可能是";过冲;相机生成的值,这些值实际上不应该线性映射。
我很感激这可能感觉像是一些学校的孩子为了逃避工作而放弃了家庭作业,但我希望可以看出,在发布这篇帖子之前,我已经研究过这些事情。
如果有人花时间回答任何问题,请提前感谢。
假设视频成像设备(尤其是网络摄像头)没有可变分辨率是否安全?
通常情况下,是。基于节能,他们将调整帧速率以管理正在处理的总像素。
为什么每个选项都列出两次,除了其中一半指定了额外的信息,如color_range、color_space和chroma_location?
色度模式指定PAL颜色。我怀疑不合格的模式是NTSC颜色。
事实上;电视";是否意味着网络摄像头只能进行有限的颜色范围
如果不合格模式为NTSC,则这是正确的。
处理颜色空间的哪种方法产生的颜色损失最小?
网络摄像头不会产生广播质量的图像。从传感器到板载处理器的一切都是为了获得足够好的输出。只要你用一个低的ish CRF编码,你总是可以根据需要使用scale或zscale或颜色空间过滤器转置到不同的颜色空间。