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

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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))


以上是关于2023-02-19:请用go语言调用ffmepg,输出视频文件信息。的主要内容,如果未能解决你的问题,请参考以下文章

2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数。

2023-02-23:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420P格式文件。

2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧用ppm图片保存。

2023-02-25:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420SP格式文件,YUV420P不要转换成YUV420SP。

2023-02-24:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420SP格式文件,采用YUV420P转YUV420SP的方式。

2023-03-08:x265的视频编码器,不用ffmpeg,用libx265.dll也行。请用go语言调用libx265.dll,将yuv文件编码成h265文件。