后端基础day12 ffmpeg入门 | 青训营笔记

212 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

概述

ffmpeg是什么: FFmpeg既是一种音视频编解码工具,也是一组音视频解码开发套件。作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。

  • FFmpeg的使用非常广泛, 在ffmpeg源码目录下,可以看到一些文件夹,都是以lib开头的,ffmpeg的基本组成主要就是这些模块,主要是AVFormat,AVCodec,AVFilter,AVDevice,AVutil等等, 了解这些就是了解ffmpeg的核心用途:
  • libavutil包含用于简化编程的各种例程,包括随机数生成器,数据结构,数学例程,核心多媒体实用程序等等。
  • libavcodec提供了解码和编码API,以及所有受支持的编解码器。
  • libavformat提供了一个解复用和复用API,以及所有受支持的复用器和解复用器。实现了目前多媒体大多数媒体
    封装格式,包括封装和解封装,例如mp4,flv,ts等,例如RTSP,RTMP网络协议封装,还支持扩展的
    封装格式,扩展的格式要相应的第三方库
  • libavdevice提供了一个接口,用于从输入设备(例如网络摄像头或输入音频)中抓取并渲染到输出设备,以及所
    有受支持的输入和输出设备
  • libswscale 高级别的图像转换API,提供了缩放和(原始像素)格式转换API,并具有多个缩放例程的高速/汇编
    优化版本。
  • libavfilter提供了音频,视频,字幕等滤镜处理框架
  • libpostproc提供视频后处理例程
  • libswresample提供了音频重采样,重矩阵化和样本格式转换API,以及许多高质量的优化例程

使用FFMPEG作为内核视频播放器:

Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音...

image.png

ffmpeg的Go SDK

由于需要使用 FFmpeg 第三方工具来完成视频截取第一帧作为封面并存储到本机, 所以运行之前需要预先安装 FFmpeg 到本机并配置好环境变量。

参考ffmpeg Documentation,事实上 FFmpeg 可以将 url 作为输入完成与将本地 mp4 文件作为输入等同的操作。

package main
import ( 
         "fmt",
         "os/exec" 
)
func main() {
	//本地输入视频文件路径
	inputFile := "input.mp4"
	//结果文件路径
	outputFile := "output.mp4"                                  // 设置 ffmpeg 的命令行参数
	args := []string{"-i", inputFile, "-c", "copy", outputFile} 
        // 创建 *exec.Cmd
        // 调用之前的需要环境变量的设置, 且exec依赖的独立环境
	cmd := exec.Command("ffmpeg", args...)                      // 运行 ffmpeg 命令, 输出结果
	if err := cmd.Run(); err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("转换成功")
}