2023-02-19:请用go语言调用ffmepg,输出视频文件信息。

2023-02-19:请用go语言调用ffmepg,输出视频文件信息。

答案2023-02-19:

用 github.com/moonfdd/ffmpeg-go 这个库。

代码参考ffmpeg5入门教程的第四个例子输出视频信息,用golang改写的

用如下命令便可查看运行结果。

go run ./examples/a04get_stream_info/main.go

代码用golang编写。代码如下:

package main

import (
	"fmt"
	"os"
	"os/exec"

	"github.com/moonfdd/ffmpeg-go/ffcommon"
	"github.com/moonfdd/ffmpeg-go/libavformat"
)

func main() {
	os.Setenv("Path", os.Getenv("Path")+";./lib")
	ffcommon.SetAvformatPath("./lib/avformat-58.dll")
	fmt_ctx := libavformat.AvformatAllocContext() //创建对象并初始化
	ret := int32(0)
	fileName := "./resources/big_buck_bunny.mp4" //文件地址

	for {
		//打开文件
		ret = libavformat.AvformatOpenInput(&fmt_ctx, fileName, nil, nil)
		if ret < 0 {
			fmt.Printf("Cannot open video file\n")
			break //Cannot open video file
		}

		//查找流信息(音频流和视频流)
		ret = fmt_ctx.AvformatFindStreamInfo(nil)
		if ret < 0 {
			fmt.Printf("Cannot find stream information\n")
			break
		}

		fmt_ctx.AvDumpFormat(0, fileName, 0) //输出视频信息
		break
	}

	libavformat.AvformatCloseInput(&fmt_ctx) //关闭文件

	fmt.Println("---------------------------------")
	cmd := exec.Command("./lib/ffprobe", fileName)
	data, err2 := cmd.CombinedOutput()
	if err2 != nil {
		fmt.Println("ffprobe err = ", err2)
		return
	}
	fmt.Println(string(data))
}

在这里插入图片描述

posted @   福大大架构师每日一题  阅读(101)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2022-02-19 2022-02-19:安装栅栏。 在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。
2021-02-19 2021-02-19:给定一个二维数组matrix,一个人必须从左上角出发,最后到达右下角。沿途只可以向下或者向右走,沿途的数字都累加就是距离累加和。请问最小距离累加和是多少?
点击右上角即可分享
微信分享提示