ffmpeg-go学习笔记

本博文基于go语言方式对ffmpeg进行简要学习,内容参考
传送门

ffmpeg的安装

这一步是大前提,打开百度,进入ffmpeg官网

点击,下载,选择windows的第二个,最后点这个,贪图方便,直接传送门
传送门

最后下载好后,解压后,效果这样

然后把bin目录与ffmpeg.exe加入path即可,使用cmd验证效果

文章的练习目录

mp4转avi

这段代码表现了将一个mp4文件转成avi文件

go 复制代码
package main

import (
	"fmt"
	"github.com/u2takey/ffmpeg-go"
)

func main() {
	err := ffmpeg_go.Input("./assets/woman1.mp4").
		Output("./assets/output2.avi", ffmpeg_go.KwArgs{"c:v": "libx264"}).
		OverWriteOutput().ErrorToStdOut().Run()
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println("ok")
}

将视频生成1秒钟切片视频

go 复制代码
func main() {

	err := ffmpeg.Input("./assets/woman1.mp4", ffmpeg.KwArgs{"ss": 1}).
		Output("./assets/out1.mp4", ffmpeg.KwArgs{"t": 1}).OverWriteOutput().Run()
	fmt.Println(err)
	fmt.Println("ok")
}

对视频进行增加水印

go 复制代码
overlay := ffmpeg.Input("./assets/1.png").Filter("scale", ffmpeg.Args{"400:800"})
	err := ffmpeg.Filter(
		[]*ffmpeg.Stream{
			ffmpeg.Input("./assets/woman3.mp4"),
			overlay,
		}, "overlay", ffmpeg.Args{"50:50"}, ffmpeg.KwArgs{"enable": "gte(t,1)"}).
		Output("./assets/out2.mp4").OverWriteOutput().ErrorToStdOut().Run()
	fmt.Println(err)

视频生成gif

go 复制代码
err := ffmpeg.Input("./assets/woman2.mp4", ffmpeg.KwArgs{"ss": "5"}).
		Output("./assets/out1.gif", ffmpeg.KwArgs{"s": "2160x2880", "pix_fmt": "rgb24", "t": "2", "r": "3"}).
		OverWriteOutput().ErrorToStdOut().Run()
	fmt.Println(err)
  • ss:开始时间
  • t:持续时间
  • r:每秒几帧图片
  • s:生成gif分辨率

视频切割

go 复制代码
func main() {
	input := ffmpeg.Input("./assets/woman7.mp4").Split()
	// get multiple output with different size/bitrate
	out1 := input.Get("0").Filter("scale", ffmpeg.Args{"1920:-1"}).
		Output("./assets/1920.mp4", ffmpeg.KwArgs{"b:v": "5000k"})
	out2 := input.Get("1").Filter("scale", ffmpeg.Args{"1920:-1"}).
		Output("./assets/1280.mp4", ffmpeg.KwArgs{"b:v": "2800k"})

	err := ffmpeg.MergeOutputs(out1, out2).OverWriteOutput().ErrorToStdOut().Run()
	fmt.Println(err)
}
相关推荐
ha204289419422 分钟前
Linux操作系统学习记录之----自定义协议(网络计算器)
linux·网络·学习
振华说技能29 分钟前
SolidWorks学习大纲-从基础到全面精通,请看详情
学习
曦月逸霜29 分钟前
离散数学-学习笔记(持续更新中~)
笔记·学习·离散数学
im_AMBER41 分钟前
Leetcode 101 对链表进行插入排序
数据结构·笔记·学习·算法·leetcode·排序算法
西京刀客1 小时前
golang路由与框架选型(对比原生net/http、httprouter、Gin)
http·golang·gin
Mr -老鬼1 小时前
Rust与Go:从学习到实战的全方位对比
学习·golang·rust
laplace01231 小时前
# 第四章|智能体经典范式构建 —— 学习笔记(详细版)
笔记·学习
程序猿零零漆1 小时前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十四)SpringMVC的请求处理
学习·spring·pandas
别了,李亚普诺夫1 小时前
PCB设计大师篇笔记
笔记·嵌入式硬件·学习
西瓜堆1 小时前
提示词工程学习笔记: IT技术行业提示词推荐
笔记·学习