GStreamer图像到视频

时间:2018-03-23 17:19:21

标签: gstreamer

我有4个不同的分辨率(1920x1080,1280x720,1920x1200),我尝试将它们转换为视频幻灯片。

此管道有效:

 gst-launch-1.0.exe -e multifilesrc location="multi_img_%d.png" index=0 caps="image/png,framerate=(fraction)1/2,width=1920,height=1080" ! pngdec ! videoconvert  ! videoscale ! video/x-raw,width=1920,height=1080  ! autovideosink

当我尝试强制帧率时,它只读取第一张图像。

我试过了:

 gst-launch-1.0.exe -e multifilesrc location="multi_img_%d.png" index=0 caps="image/png,framerate=(fraction)1/2,width=1920,height=1080" ! pngdec ! videoconvert ! videoscale ! video/x-raw,width=1920,height=1080 ! videorate ! video/x-raw,width=1920,height=1080,framerate=25/1 ! autovideosink

 gst-launch-1.0.exe -e multifilesrc location="multi_img_%d.png" index=0 caps="image/png,framerate=(fraction)1/2,width=854,height=480" ! pngdec ! videoconvert ! videoscale ! videorate ! video/x-raw,width=1920,height=1080,framerate=25/1 ! autovideosink

我不明白为什么添加帧率会导致我的管道忽略一些图片。 (我在Windows 10下使用全新的GStreamer 1.14.0)

编辑:当我手动调整图片大小以便它们具有相同的分辨率时,我忘记了这一点,所有上述管道都有效!

1 个答案:

答案 0 :(得分:0)

我怀疑这是一个时间问题。您正在运行实时管道,但很可能PNG解码速度不够快,无法以25/1 fps的方式传输帧,而且如果它们到达太晚,则视频会丢弃它们。也许在视频会话中添加var nodes = [GKGridGraphNode]() let maxSize = 3 //Here I'm filling the elements of the grid for i in 0..<maxSize { for j in 0..<maxSize { let node = GKGridGraphNode(gridPosition: vector_int2(Int32(i), Int32(j))) nodes.append(node) } } let graph = GKGridGraph(nodes) let start = GKGridGraphNode(gridPosition: vector_int2(0,0)) let end = GKGridGraphNode(gridPosition: vector_int2(2,2)) let path = graph.findPath(from: start, to: end) //It returns an empty array print(path) 可以防止在您的情况下丢帧。