Go 从视频字节中获取帧
我正在使用ffmpeg和golang从视频中提取一帧。如果我有一个以字节为单位的视频,而不是以.mp4的形式保存在磁盘上,我如何告诉ffmpeg从这些字节中读取,而不必将文件写入磁盘,因为这要慢得多 我可以从文件中读取,但我不确定如何从字节中读取 我看过Go 从视频字节中获取帧,go,ffmpeg,Go,Ffmpeg,我正在使用ffmpeg和golang从视频中提取一帧。如果我有一个以字节为单位的视频,而不是以.mp4的形式保存在磁盘上,我如何告诉ffmpeg从这些字节中读取,而不必将文件写入磁盘,因为这要慢得多 我可以从文件中读取,但我不确定如何从字节中读取 我看过ffmpeg文档,但只看到了输出示例,而没有看到输入示例 func ExtractImage(fileBytes[]字节){ //命令行参数、路径和命令 command=“ffmpeg” frameExtractionTime:=“0:00:05
ffmpeg
文档,但只看到了输出示例,而没有看到输入示例
func ExtractImage(fileBytes[]字节){
//命令行参数、路径和命令
command=“ffmpeg”
frameExtractionTime:=“0:00:05.000”
vFrame:=“1”
qv:=“2”
输出:=“/home/ubuntu/media/video-to-image/output-”+time.Now().Format(time.Kitchen)+“.jpg”
//TODO:使用文件字节而不是视频路径
//创建命令
cmd:=执行命令(命令,
“-ss”,帧提取时间,
“我”,视频路径,
“-vframes”,vframes,
“-q:v”,qv,
输出)
//运行该命令,不要等待它完成。正在运行waiting exec
//为了举例而忽略错误
_=cmd.Start()
_=cmd.Wait()
}
通过指定-
作为选项-i
的值,您可以使ffmpeg
从stdin读取数据,而不是从磁盘读取文件。然后将视频字节作为stdin传递给命令
func ExtractImage(fileBytes []byte){
// command line args, path, and command
command := "ffmpeg"
frameExtractionTime := "0:00:05.000"
vframes := "1"
qv := "2"
output := "/home/ubuntu/media/video-to-image/output-" + time.Now().Format(time.Kitchen) + ".jpg"
cmd := exec.Command(command,
"-ss", frameExtractionTime,
"-i", "-", // to read from stdin
"-vframes", vframes,
"-q:v", qv,
output)
cmd.Stdin = bytes.NewBuffer(fileBytes)
// run the command and don't wait for it to finish. waiting exec is run
// ignore errors for examples-sake
_ = cmd.Start()
_ = cmd.Wait()
}
您可能需要运行ffmpeg-protocols
,以确定在构建ffmpeg时是否支持pipe
协议(从stdin读取)