2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数。|世界微资讯
(相关资料图)
2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数。
答案2023-02-21:
使用 github.com/moonfdd/ffmpeg-go 库,这个库比goav还好用。
代码根据05:解码视频流过程用golang编写。
执行命令:
go run ./examples/a05video_decode_flow/main.go
代码用golang编写。代码如下:
package mainimport ("fmt""os""github.com/moonfdd/ffmpeg-go/ffcommon""github.com/moonfdd/ffmpeg-go/libavcodec""github.com/moonfdd/ffmpeg-go/libavformat""github.com/moonfdd/ffmpeg-go/libavutil")func main() {os.Setenv("Path", os.Getenv("Path")+";./lib")ffcommon.SetAvutilPath("./lib/avutil-56.dll")ffcommon.SetAvcodecPath("./lib/avcodec-58.dll")ffcommon.SetAvdevicePath("./lib/avdevice-56.dll")ffcommon.SetAvfilterPath("./lib/avfilter-56.dll")ffcommon.SetAvformatPath("./lib/avformat-58.dll")ffcommon.SetAvpostprocPath("./lib/postproc-55.dll")ffcommon.SetAvswresamplePath("./lib/swresample-3.dll")ffcommon.SetAvswscalePath("./lib/swscale-5.dll")filePath := "./resources/big_buck_bunny.mp4" //文件地址videoStreamIndex := -1 //视频流所在流序列中的索引ret := int32(0) //默认返回值//需要的变量名并初始化var fmtCtx *libavformat.AVFormatContextvar pkt *libavcodec.AVPacketvar codecCtx *libavcodec.AVCodecContextvar avCodecPara *libavcodec.AVCodecParametersvar codec *libavcodec.AVCodeclibavformat.AvformatNetworkInit()for {//=========================== 创建AVFormatContext结构体 ===============================////分配一个AVFormatContext,FFMPEG所有的操作都要通过这个AVFormatContext来进行fmtCtx = libavformat.AvformatAllocContext()//==================================== 打开文件 ======================================//ret = libavformat.AvformatOpenInput(&fmtCtx, filePath, nil, nil)if ret != 0 {fmt.Printf("cannot open video file\n")break}//=================================== 获取视频流信息 ===================================//ret = fmtCtx.AvformatFindStreamInfo(nil)if ret < 0 {fmt.Printf("cannot retrive video info\n")break}//循环查找视频中包含的流信息,直到找到视频类型的流//便将其记录下来 保存到videoStreamIndex变量中for i := uint32(0); i < fmtCtx.NbStreams; i++ {if fmtCtx.GetStream(i).Codecpar.CodecType == libavutil.AVMEDIA_TYPE_VIDEO {videoStreamIndex = int(i)break //找到视频流就退出}}//如果videoStream为-1 说明没有找到视频流if videoStreamIndex == -1 {fmt.Printf("cannot find video stream\n")break}//打印输入和输出信息:长度 比特率 流格式等fmtCtx.AvDumpFormat(0, filePath, 0)//================================= 查找解码器 ===================================//avCodecPara = fmtCtx.GetStream(uint32(videoStreamIndex)).Codecparcodec = libavcodec.AvcodecFindDecoder(avCodecPara.CodecId)if codec == nil {fmt.Printf("cannot find decoder\n")break}//根据解码器参数来创建解码器内容codecCtx = codec.AvcodecAllocContext3()codecCtx.AvcodecParametersToContext(avCodecPara)if codecCtx == nil {fmt.Printf("Cannot alloc context.")break}//================================ 打开解码器 ===================================//ret = codecCtx.AvcodecOpen2(codec, nil)if ret < 0 { // 具体采用什么解码器ffmpeg经过封装 我们无须知道fmt.Printf("cannot open decoder\n")break}//=========================== 分配AVPacket结构体 ===============================//i := 0 //用于帧计数pkt = libavcodec.AvPacketAlloc() //分配一个packetpkt.AvNewPacket(codecCtx.Width * codecCtx.Height) //调整packet的数据//=========================== 读取视频信息 ===============================//for fmtCtx.AvReadFrame(pkt) >= 0 { //读取的是一帧视频 数据存入一个AVPacket的结构中if pkt.StreamIndex == uint32(videoStreamIndex) {i++ //只计算视频帧}pkt.AvPacketUnref() //重置pkt的内容}fmt.Printf("There are %d frames int total.\n", i)break}//===========================释放所有指针===============================//libavcodec.AvPacketFree(&pkt)codecCtx.AvcodecClose()libavformat.AvformatCloseInput(&fmtCtx)fmtCtx.AvformatFreeContext()}
关键词: 视频处理
- 2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数。|世界微资讯
- 当前短讯!刚刚!两大板块爆发,最火概念突发跳水!香港富豪榜揭晓,李嘉诚登顶!这地宣布:三孩家庭补贴3000元
- 美知名学者:安理会对“北溪”管道事件进行调查是“全球优先事项”
- 银行业转型要摆脱“看天吃饭”|天天看点
- aj是什么牌子的鞋多少钱_aj是什么牌子
- 当前热议!脑髓在颤抖表情包_脑髓
- 环球速看:跑跑卡丁车手游S5第二周挑战任务攻略 3月23日身手不凡挑战任务汇总
- 孕妇感冒嗓子痒痒怎么办_孕妇感冒嗓子痒怎么办_天天日报
-
世界新动态:《天刀ol》情人节甜蜜玩法开启
心动佳节至,天涯明月刀OL也有大波精彩内容更新~新外观、新活动、海量福利,陪伴少侠在刀刀共度浪漫好时光~花语飞舞,浪漫满屋。全新外观【
-
针织女装毛衣大全_针织织物 天天亮点
1、针织织物是一种套题构件,针织线圈的形成是通过在机器横向(纬编)或纵向(经编)引人纱线实现的。2、针织方法可以得到多种
-
陈茂波:未来3年提供1亿港元吸引家族办公室来港推行家办税务宽减_当前讯息
陈茂波:未来3年提供1亿港元吸引家族办公室来港推行家办税务宽减:2021年香港管理的资产规模超35万亿港元,从业人员达54000人。陈茂波表示,将
-
外交部发言人:美国是当之无愧的国际规则和秩序头号破坏者 世界今头条
新华社北京2月21日电(记者董雪、邵艺博)针对美国常务副国务卿舍曼近日涉华消极言论,外交部发言人汪文斌21日在例行记者会上回答提问时说,事
X 关闭
X 关闭