gpt4 book ai didi

go - golang中的FFmpeg I-P帧命令

转载 作者:行者123 更新时间:2023-12-04 22:56:42 25 4
gpt4 key购买 nike

我一直在使用下面的命令从视频中获取特定帧并将其放入缓冲区。

func ReadFrameAsJpeg(inFileName string, frameNum int) []byte {
// Returns specified frame as []byte
buf := bytes.NewBuffer(nil)
err := ffmpeg.Input(inFileName).
Filter("select", ffmpeg.Args{fmt.Sprintf("gte(n,%d)", frameNum)}).
Output("pipe:", ffmpeg.KwArgs{"vframes": 1, "format": "image2", "vcodec": "mjpeg"}).
WithOutput(buf, os.Stdout).Run()
if err != nil {
fmt.Println(err)
panic(err)
}
在根据 FrameNum 获取特定帧的同时,我还想检查它是哪种类型的帧。就像使用“pict_type”来获取该信息一样。我尝试使用过滤器来获取下面的帧类型,但它显示“解析参数时出错”。它应该给出带有“pict_type = P”或“pict_type = I”的输出
Filter("select", ffmpeg.Args{fmt.Sprintf("eq(n,%d),showinfo", frameNum)}).
我正在尝试实现以下命令
$ ffmpeg -hide_banner -i INPUT.mp4 -filter:v "select=eq('n,3344'),showinfo" -frames:v 1 -map 0:v:0 -f null -

最佳答案

您正在指定 showinfo作为select 的一部分过滤器选项,而不是定义 2 个不同的过滤器。假设您使用的是 this library ,你需要做这样的事情:

ffmpeg.Input(inFileName)
.Filter("select", ffmpeg.Args{fmt.Sprintf("eq(n,%d)", frameNum)})
.Filter("showinfo")
.Output(...)...
我对 Go 语言不熟悉,因此您可能需要解决语法问题。
编辑:
是的,它应该是一个不同的过滤器。
对于 golang,它可以使用,
Filter("select", ffmpeg.Args{fmt.Sprintf("gte(n,%d)", frameNum)}).
Filter("showinfo", ffmpeg.Args{"TRUE"})

关于go - golang中的FFmpeg I-P帧命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71820648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com