前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ffmpeg 命令的 golang binding 工具

ffmpeg 命令的 golang binding 工具

原创
作者头像
王磊-字节跳动
修改2020-11-20 17:38:34
3.5K0
修改2020-11-20 17:38:34
举报
文章被收录于专栏:01ZOO01ZOO

项目地址:

https://github.com/u2takey/ffmpeg-go

使用例子

代码语言:txt
复制
import (
	ffmpeg "github.com/u2takey/ffmpeg-go"
)

split := ffmpeg.Input(TestInputFile1).VFlip().Split()
	split0, split1 := split.Get("0"), split.Get("1")
	overlayFile := Input(TestOverlayFile).Crop(10, 10, 158, 112)
err := ffmpeg.Concat([]*Stream{
    split0.Trim(KwArgs{"start_frame": 10, "end_frame": 20}),
    split1.Trim(KwArgs{"start_frame": 30, "end_frame": 40})}).
        Overlay(overlayFile.HFlip(), "").
        DrawBox(50, 50, 120, 120, "red", 5).
        Output(TestOutputFile1).
        OverWriteOutput().Run()

抽帧

代码语言:txt
复制
func ExampleReadFrameAsJpeg(inFileName string, frameNum int) io.Reader {
	buf := bytes.NewBuffer(nil)
	err := ffmpeg.Input(inFileName).
		Filter("select", ffmpeg.Args{fmt.Sprintf("gte(n,%d)", frameNum)}).
		Output("pipe:", ffmpeg.KwArgs{"vframes": 1, "format": "image2", "vcodec": "mjpeg"}).
		WithOutput(buf, os.Stdout).
		Run()
	if err != nil {
		panic(err)
	}
	return buf
}

reader := ExampleReadFrameAsJpeg("./sample_data/in1.mp4", 5)
img, err := imaging.Decode(reader)
if err != nil {
    t.Fatal(err)
}
err = imaging.Save(img, "./sample_data/out1.jpeg")
if err != nil {
    t.Fatal(err)
}

结果 :

显示处理进度

see complete example at: showProgress

代码语言:txt
复制
func ExampleShowProgress(inFileName, outFileName string) {
	a, err := ffmpeg.Probe(inFileName)
	if err != nil {
		panic(err)
	}
	totalDuration := gjson.Get(a, "format.duration").Float()

	err = ffmpeg.Input(inFileName).
		Output(outFileName, ffmpeg.KwArgs{"c:v": "libx264", "preset": "veryslow"}).
		GlobalArgs("-progress", "unix://"+TempSock(totalDuration)).
		OverWriteOutput().
		Run()
	if err != nil {
		panic(err)
	}
}
ExampleShowProgress("./sample_data/in1.mp4", "./sample_data/out2.mp4")

结果

代码语言:txt
复制
progress:  .0
progress:  0.72
progress:  1.00
progress:  done

和 Open-cv (gocv) 一起使用做视频人脸识别

see complete example at: opencv

结果:

支持生成 flowchart

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目地址:
  • 使用例子
    • 抽帧
      • 显示处理进度
        • 和 Open-cv (gocv) 一起使用做视频人脸识别
        • 支持生成 flowchart
        相关产品与服务
        实时音视频
        实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档