小白:我录了段视频,里面用的音乐是有版权的,并且快过时了,能把音乐去掉吗?
小程拿到视频后,一个快捷键打开命令终端,快速打下一行命令:html
ffmpeg -i 小白.flv -vcodec copy -an -f mp4 quiet.mp4
一个只有视频图像的文件就诞生了。git
声画分离,这固然只是ffmpeg命令的一个应用场景。macos
那么,FFmpeg是什么呢?bash
来看看百度百科的解释:服务器
FFmpeg是一套能够用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了很是先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里不少code都是从头开发的。FFmpeg在Linux平台下开发,但它一样也能够在其它操做系统环境中编译运行,包括Windows、Mac OS X等。这个项目最先由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,并且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"表明"Fast Forward"。工具
小程用本身的话,再来翻译一下:oop
FFmpeg是一个开源项目,一直有人在加新功能、优化、改bug。这个项目,能够进行音视频的录制、编码、流化、解码、效果处理、重采样等一系列的操做......
基本上,有音视频功能的应用,都跟FFmpeg扯上关系,好比暴风影音、QQ影音、mplayer、格式工厂等等。优化
小白:我可无论谁在用,我只要本身能用就行。小程:那FFmpeg的开源协议LGPL跟耻辱柱,你也不想听了?网站
小白:LGPL?老公漂亮?ui
开源项目都制定本身的开源协议,这里我不细说了,你以为有必要的话能够去搜索了解。
本文的重点在于,介绍如何使用ffmpeg命令(FFmpeg程序),实现一些经常使用的音视频操做功能,好比在视频上添加文字或水印。
个人开发环境是mac,如下的介绍都默认在mac系统上操做,但FFmpeg命令基本是平台无差异的。
生成FFmpeg程序有两个办法,一个是使用源码编译生成,另外一个是直接安装,我分别介绍这两种方法。
这个办法是下载FFmpeg源码下来,再编译生成FFmpeg程序。若是想使用FFmpeg来组装本身的程序,这个办法是必经之路。
我这里介绍怎么用ffmepg命令来给视频添加文字或水印,为了实现这个功能,在编译FFmpeg时须要增长特定的参数设置。因而可知,为了知足不一样的需求,能够调整编译FFmpeg的编译选项。
小白:把文字写到视频上?还不简单,你要什么颜色,我有彩色笔。小程:我是说,在视频帧上加入文字,不是让你在屏幕上画个大叉!
在视频帧上加入文字,可选择的办法有几个,好比能够找一找“编辑视频加广告”、或视频大师之类的工具,也能够写程序来实现(好比提取出全部帧,再对图片处理,再整合全部图片),这里介绍的是直接用ffmpeg命令来实现。
这时,须要使用FFmpeg的drawtext滤镜来实现添加字幕。
滤镜,能够理解为视频的编辑功能(视频效果处理),是FFmpeg强大的功能之一。
先下载FFmpeg的源码:
git clone git://source.ffmpeg.org/ffmpeg.git FFmpeg
在FFmpeg目录下面,能够看到FFmpeg的编译配置程序configure。
要保证ffmpeg程序支持filter,不然ffmpeg在使用drawtext时,会看到这样的提示:
这时,查看FFmpeg配置后(即执行./configure后)生成的头文件config.h(若是配置过就会有这个文件),能够看到:
#define CONFIG_DRAWTEXT_FILTER 0
这是尚未打开drawtext滤镜的表现。
那怎么样让ffmpeg程序支持filter呢?
首先,须要安装yasm,若是当前的macos没有这个执行程序的话(能够用wihch yasm 来查看一下)。yasm是一个汇编编译器,我会在FFmpeg编译给移动平台使用时再介绍一下yasm,如今直接安装便可:
brew install yasm
你若是不了解brew的话,能够搜索homebrew进行了解。
安装yasm后,就能够配置FFmpeg,让它支持filter(drawtext依赖于libfreetype):
./configure --enable-libfreetype --enable-avfilter
这时,在配置输出中(执行./configure),能够看到:
而此时,config.h中是这样:
#define CONFIG_DRAWTEXT_FILTER 1
接着,编译出ffmpeg工具便可:
make
小程不建议执行make install来安装到系统,由于在介绍第二种安装ffmpeg程序的办法时,会给系统安装一个ffmpeg。因此,只执行make在当前目录生成ffmpeg便可。
查一下ffmpeg程序,有没有支持到drawtext滤镜:
./ffmpeg -filters
能够看到,已经有这一项:
以一个视频为例,在没有加字幕前,这个视频是这样的:
使用ffmpeg命令,这样加上字幕:
左右滚动的字幕:
./ffmpeg -i ~/Desktop/hello.mp4 -b:v 500K -vf drawtext="fontfile=/Library/Fonts/YaHei.Consolas.1.11b.ttf:fontcolor=0xaaff00:fontsize=18:shadowy=0:\x='if(gte(t,2), (main_w-mod(t*50,main_w)), NAN)':y=(main_h-line_h-10):text='关注广州小程,提高专业技能。'" hello.mp4
固定位置的字幕(这里加了两行):
./ffmpeg -i ~/Desktop/hello.mp4 -b:v 500K -vf "drawtext=fontfile=/Library/Fonts/华文黑体.ttf:fontcolor=yellow:fontsize=20:shadowy=0:x=(w-tw)/2-30:y=(main_h-line_h-50):text="关注广州小程",drawtext=fontfile=/Library/Fonts/YaHei.Consolas.1.11b.ttf:fontcolor=0xaaff00:fontsize=18:shadowy=0:x=(w-tw)/2-30:y=(main_h-line_h-20):text='提高专业技能'" hello1.mp4
把上面加了字幕的mp4文件,转换成gif(由于不少网站支持gif上传而不支持视频),好比:
./ffmpeg -i hello.mp4 -b:v 10K -s 200x200 hello.gif
而后看一下这两个效果,一个是滚动文字,另外一个是固定文字:
小程简单讲解一下命令中的参数,请参考下图的注解:
另外注意一下,x与y参数指定了位置,是能够变化的值;
若是须要输出多行文字,则可使用多个drawtext字段;
若是以为文字的颜色很差调整,那能够考虑给文字加上背景框,试一下这些参数:
box --是否使用背景框,默认为0 boxcolor --背景框的颜色 borderw --背景框的阴影,默认为0 bordercolor --背景框阴影的颜色
以上是在视频上绘制字幕,若是想在视频上绘制图片,包括动态的gif图,怎么处理呢?
视频添加图片:
./ffmpeg -i ~/Desktop/2.mp4 -acodec copy -b:v 800K -vf "movie=in.png[watermark];inoverlay=main_w-100:main_h-100[out]" out4-1.mp4
其中:
movie --水印图片 overlay --三个参数,[距视频原图左边的距离,距上边的距离,是否透明],对于视频,最后一个参数不能使用
视频添加动态水印(gif):
./ffmpeg -y -i ~/Desktop/v.mp4 -ignore_loop 0 -i hello.gif -ss 0 -t 9 -filter_complex overlay=main_w-138:0:1 v-3.mp4
因为没法上传视频,这里就不展现效果了。至此,小程介绍了如何在视频上添加文字、图片及gif动态水印。
接着介绍的是直接安装FFmpeg的办法。
直接安装FFmpeg库,好比在mac机上,直接用brew来安装。若是你的系统自带ffmpeg,那就没必要了。
这样安装FFmpeg:
sudo brew link x264
brew install ffmpeg
若是以前已经安装过FFmpeg,那要留意提示,是否新安装的FFmpeg有link成功。若是没有成功也是可使用的,只是要找对文件来运行。若是不想干扰到原来安装的ffmpeg,也能够起个别名来使用,好比新安装目录是:/usr/local/Cellar/ffmpeg/2.6.2/bin,则在~/.bash_profile中增长一项:alias f26='/usr/local/Cellar/ffmpeg/2.6.2/bin/ffmpeg',即可以使用f26来调动新安装的FFmpeg。
安装办法可能变化的,遇到问题不要慌,按错误提示,具体问题具体分析。
安装完成后,这样查看一下ffmpeg的信息:
ffmpeg -version
能够看到,默认安装下,已经支持lamemp三、x26四、librtmp第三方库等。
安装完ffmpeg,就能够作一些常规操做了。有什么常规操做呢,提取、合成、转码、录制,等等,这些操做均可以使用ffmpeg命令来完成。
那么问题就来了,这么多命令与参数,能记得住吗?不能。因此一方面能够自行记录一些经常使用的命令,另外一方面须要知道在哪里查看命令与参数。全部命令与参数的使用均可以在这个地址查到: https://ffmpeg.org/ffmpeg.html ,或者更具体一点的好比: https://ffmpeg.org/ffmpeg.htm... 。
小程在这里简单列举几个,你应该根据本身的需求来查看适当的命令。
提取视频流:
ffmpeg -i xx.flv -vcodec copy -an output.h264
提取音频流:
ffmpeg -i fx_flash22298734.flv -acodec copy -vn audio.aac
提取音轨(音频流):
ffmpeg -i 后来_MQ.m4a -map 0:0 0.wavffmpeg -i 后来_MQ.m4a -map 0:1 1.wav
提取声道:
ffmpeg -i "TFBOYS - 是你.mp3" -map_channel 0.0.0 1.aac -map_channel 0.0.1 2.aac
合成音频与视频:
ffmpeg -i 1.mp4 -i 1.wav -vcodec copy mix_test.mp4
转码:
ffmpeg -i 22298734.flv -vcodec mpeg4 -s 320*240 -an -f m4v test.mp4
保存rtmp流在本地:
ffmpeg -i "rtmp://xxx.com/live/hks live=1" -vcodec copy -acodec copy out.flv
以上介绍了直接安装FFmpeg,并使用ffmpeg命令的内容。
好了,总结一下,本文介绍了如何生成ffmpeg命令程序的办法,包括经过源码编译与直接安装的办法。同时,也演示了使用ffmpeg命令来给视频添加字幕或图像(包括动态图像)的操做,以及列举了可能经常使用的ffmpeg命令。有缘再见,see you。