我一直在使用下面的命令從視頻中獲取特定幀并將其放入緩沖區。
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 -
uj5u.com熱心網友回復:
您指定showinfo為select過濾器選項的一部分,而不是定義 2 個不同的過濾器。假設您正在使用這個庫,您需要執行以下操作:
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"})
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/461365.html
上一篇:如何決議來自兩個API的資料
