FFmpeg介绍和使用

安装FFmpeg

在Mac上通过brew安装FFmpeg

brew tap homebrew-ffmpeg/ffmpeg
brew options homebrew-ffmpeg/ffmpeg/ffmpeg

brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-chromaprint --with-decklink --with-fdk-aac --with-game-music-emu --with-libbluray --with-libbs2b --with-libcaca --with-libgsm --with-libmodplug --with-librsvg --with-libsoxr --with-libssh --with-libvidstab --with-libvmaf --with-libxml2 --with-opencore-amr --with-openh264 --with-openjpeg --with-openssl --with-openssl@1.1 --with-rav1e --with-rtmpdump --with-rubberband --with-speex --with-srt --with-tesseract --with-two-lame --with-webp --with-xvid --with-zeromq --with-zimg --HEAD

验证是否安装成功

ffmpeg -version

使用FFmpeg

获取视频信息

ffmpeg -i test.mp4

将图片序列合成视频

ffmpeg -f image2 -i image%d.jpg video.mpg
可把当前目录下的图片(名字如:image1.jpg、image2.jpg 等)合并成video.mpg

将视频分解成图片

ffmpeg -i video.mpg image%d.jpg

从视频中抽取声音

视频截图

package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"os/exec"
)

func main() {
	filename := "http://www.xxxxxxx.com/yyyy.mp4"
	width := 640
	height := 360
	cmd := exec.Command("ffmpeg", "-i", filename, "-vframes", "10", "-s", fmt.Sprintf("%dx%d", width, height), "-f", "singlejpeg", "-")
	var buffer bytes.Buffer
	cmd.Stdout = &buffer
	if cmd.Run() != nil {
		panic("could not generate frame")
	}

	ioutil.WriteFile("./frame.jpg", []byte(buffer.String()), 0666)
}

视频添加图片水印

ffmpeg -i input.mp4 -vf "movie=水印图片.png[watermark];[in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] " output.mp4
-i:表示输入
-vf:滤镜相关,视频裁剪,水印等等操作都需要它完成
overlay:水印参数
main_w-overlay_w-10:水印在x轴的位置,也可以写成x=main_w-overlay_w-10
main_h-overlay_h-10:水印在y轴的位置
或者也可以使用命令 ffmpeg -i input.mp4 -i logo.png -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' output.mp4

视频添加文字水印

ffmpeg -i input.mp4 -vf "drawtext=fontfile=simhei.ttf: text='abc-watermark':x=10:y=10:fontsize=24:fontcolor=white:shadowy=2" output.mp4
在视频左上角添加一条白色字体的文字水印