2023-04-21:用go语言重写ffmpeg的metadata.c示例。

这篇具有很好参考价值的文章主要介绍了2023-04-21:用go语言重写ffmpeg的metadata.c示例。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2023-04-21:用go语言重写ffmpeg的metadata.c示例。

答案2023-04-21:

这段 Go 代码演示了如何使用 ffmpeg-go 库中的函数来读取多媒体文件元数据,包括视频、音频等信息。它的大体过程如下:

  1. 设置环境变量以加载 FFmpeg 动态链接库

这里将 FFmpeg 库中的各个动态链接库路径添加到环境变量 PATH 中,以便在程序运行时能够自动加载。同时,通过 ffcommon 包中提供的函数设置各个库的路径。

  1. 创建一个输出目录

如果指定的输出目录不存在,则创建一个新的目录用于存储输出文件。

  1. 打开输入文件并查找流信息

使用 libavformat.AvformatOpenInput() 函数打开用户指定的输入文件,并将返回的 AVFormatContext 结构体指针赋值给 fmt_ctx 变量。然后调用 fmt_ctx.AvformatFindStreamInfo(nil) 函数查找输入文件中的流信息。

  1. 遍历元数据并输出

使用 fmt_ctx.Metadata.AvDictGet() 函数获取输入文件中的元数据。该函数返回指向 AVDictionaryEntry 结构体的指针,其中包含键值对形式的元数据信息。使用 for 循环遍历所有元数据,并使用 fmt.Printf() 函数输出每个元数据的键值对。

  1. 关闭输入文件

使用 libavformat.AvformatCloseInput(&fmt_ctx) 函数关闭输入文件并释放内存。

使用github/moonfdd/ffmpeg-go库。

命令如下:

go run ./examples/internalexamples/metadata/main.go ./resources/big_buck_bunny.mp4

golang代码如下:

package main

import (
	"fmt"
	"os"

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

func main() {
	// go run ./examples/internalexamples/metadata/main.go ./resources/big_buck_bunny.mp4

	os.Setenv("Path", os.Getenv("Path")+";./lib")
	ffcommon.SetAvutilPath("./lib/avutil-56.dll")
	ffcommon.SetAvcodecPath("./lib/avcodec-58.dll")
	ffcommon.SetAvdevicePath("./lib/avdevice-58.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")

	genDir := "./out"
	_, err := os.Stat(genDir)
	if err != nil {
		if os.IsNotExist(err) {
			os.Mkdir(genDir, 0777) //  Everyone can read write and execute
		}
	}
	main0()
}

func main0() (ret ffcommon.FInt) {
	var fmt_ctx *libavformat.AVFormatContext
	var tag *libavutil.AVDictionaryEntry

	if len(os.Args) != 2 {
		fmt.Printf("usage: %s <input_file>\nexample program to demonstrate the use of the libavformat metadata API.\n\n", os.Args[0])
		return 1
	}
	ret = libavformat.AvformatOpenInput(&fmt_ctx, os.Args[1], nil, nil)
	if ret != 0 {
		return ret
	}

	ret = fmt_ctx.AvformatFindStreamInfo(nil)
	if ret < 0 {
		libavutil.AvLog(uintptr(0), libavutil.AV_LOG_ERROR, "Cannot find stream information\n")
		return ret
	}

	tag = fmt_ctx.Metadata.AvDictGet("", tag, libavutil.AV_DICT_IGNORE_SUFFIX)
	for tag != nil {
		fmt.Printf("%s=%s\n", ffcommon.StringFromPtr(tag.Key), ffcommon.StringFromPtr(tag.Value))
		tag = fmt_ctx.Metadata.AvDictGet("", tag, libavutil.AV_DICT_IGNORE_SUFFIX)
	}

	libavformat.AvformatCloseInput(&fmt_ctx)
	return 0
}

2023-04-21:用go语言重写ffmpeg的metadata.c示例。文章来源地址https://www.toymoban.com/news/detail-420859.html

到了这里,关于2023-04-21:用go语言重写ffmpeg的metadata.c示例。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go 语言实现冒泡排序算法的简单示例

    以下是使用 Go 语言实现冒泡排序算法的简单示例: 在这个例子中, bubbleSort 函数接收一个整数切片,对切片中的元素进行冒泡排序。在 main 函数中,我们定义了一个示例数组,调用 bubbleSort 函数对其进行排序,并输出结果。 注意,冒泡排序算法的时间复杂度为 O(n^2),因此对

    2024年01月23日
    浏览(47)
  • 【gRPC】go语言实现gRPC(示例实践演示)

    目录 1、获取gRPC和Protobuf依赖 2、安装protobuf编译器 3、安装两个插件  4、编译proto文件 5、服务端 6、客户端 7、结果展示 goLand配置 Release Protocol Buffers v21.6 · protocolbuffers/protobuf · GitHub Protocol Buffers - Google\\\'s data interchange format - Release Protocol Buffers v21.6 · protocolbuffers/protobuf https:

    2023年04月09日
    浏览(46)
  • Go 语言实现归并排序算法的简单示例(附上源码)

    以下是使用 Go 语言实现归并排序算法的简单示例: 在这个例子中, mergeSort 函数接收一个整数切片,使用递归的方式进行归并排序。 merge 函数用于合并两个已排序的切片。在 main 函数中,我们定义了一个示例数组,调用 mergeSort 函数对其进行排序,并输出结果。 归并排序算

    2024年01月21日
    浏览(45)
  • 【Go语言】基于Socket编程的P2P通信程序示例

    Go语言的Socket编程实现为开发者提供了一种高效且强大的方式来实现网络通信。通过Go语言的并发模型和内置的网络库,如 net 包,开发者可以轻松地创建基于套接字的通信应用。Go语言的goroutine和channel机制使并发处理变得简单,能够轻松处理多个连接和数据交换。使用Go语言

    2024年02月11日
    浏览(54)
  • Amazonlinux2023(AL2023)获取metadata

    今年AWS发布了新的Amazonlinux2023版本,其中获取metadata元数据方式发生了一点改变。 早些时候,在 Amazon Linux 2 中,使用以下命令获取实例元数据 具体可以获取的元数据类别可以查阅如下aws官方文档 https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/instancedata-data-categories.html https://do

    2024年02月08日
    浏览(38)
  • GO语言:Worker Pools线程池、Select语句、Metex互斥锁详细示例教程

    技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请点点赞收藏+关注谢谢支持 !!!

    2024年02月11日
    浏览(40)
  • VScode下配置Go语言开发环境【2023最新】

    本文主要记录了 Go 的安装,以及给 vscode 配置 Go 的环境。 截图比较多所以显得文章比较长。如有错误欢迎指出~ 系统:Windows 10 go:1.20.6 vscode:June 2023 (version 1.80) 下载链接:Go下载 下载和系统对应的版本,我是 windows 所以选择了下图的这个。选的是最新的稳定版本 go1.20.6:

    2024年02月15日
    浏览(60)
  • R语言、04 案例P143 Go bananas、《商务与经济统计》案例题

    编程教材 《R语言实战·第2版》Robert I. Kabacoff 课程教材 《商务与经济统计·原书第13版》 (安德森) 每周有4.5%的概率会中断生产,考虑到企业利润,时间就是金钱。大部分公司生产线日产量是以万为单位的,暂停生产线进行调试对食品公司来说是极大的损失。应当修改策略方案

    2024年01月20日
    浏览(51)
  • Go语言集成开发环境(IDE):GoLand 2023中文

    GoLand 2023是一款由JetBrains开发的现代化、功能丰富的Go语言集成开发环境(IDE) 。它提供了智能代码提示和自动完成、强大的内置调试器以及代码重构工具,帮助开发者提高编码效率并确保代码质量。GoLand 2023还支持多种版本控制系统,集成了测试工具,并提供了代码审查功能

    2024年02月06日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包