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))
}

在这里插入图片描述

本作品采用《CC 协议》,转载必须注明作者和本文链接
微信公众号:福大大架构师每日一题。最新面试题,涉及golang,rust,mysql,redis,云原生,算法,分布式,网络,操作系统。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
486
粉丝
23
喜欢
38
收藏
22
排名:452
访问:2.0 万
私信
所有博文
社区赞助商