我有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)
编辑:当我手动调整图片大小以便它们具有相同的分辨率时,我忘记了这一点,所有上述管道都有效!
答案 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)
可以防止在您的情况下丢帧。