小白:我录了段视频,外面用的音乐是有版权的,而且快过期了,能把音乐去掉吗?
小程拿到视频后,一个快捷键关上命令终端,疾速打下一行命令:
ffmpeg -i 小白.flv -vcodec copy -an -f mp4 quiet.mp4
一个只有视频图像的文件就诞生了。
声画拆散,这当然只是 ffmpeg 命令的一个利用场景。
那么,FFmpeg 是什么呢?
来看看百度百科的解释:
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”。
小程用本人的话,再来翻译一下:
FFmpeg 是一个开源我的项目,始终有人在加新性能、优化、改 bug。这个我的项目,能够进行音视频的录制、编码、流化、解码、成果解决、重采样等一系列的操作 ……
基本上,有音视频性能的利用,都跟 FFmpeg 扯上关系,比方暴风影音、QQ 影音、mplayer、格局工厂等等。
小白:我可不论谁在用,我只有本人能用就行。
小程:那 FFmpeg 的开源协定 LGPL 跟耻辱柱,你也不想听了?
小白:LGPL?老公丑陋?
开源我的项目都制订本人的开源协定,这里我不细说了,你感觉有必要的话能够去搜寻理解。
本文的重点在于,介绍如何应用 ffmpeg 命令(FFmpeg 程序),实现一些罕用的音视频操作性能,比方在视频上增加文字或水印。
我的开发环境是 mac,以下的介绍都默认在 mac 零碎上操作,但 FFmpeg 命令根本是平台无差别的。
生成 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。
(1)反对滤镜 filter
要保障 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
能够看到,曾经有这一项:
(2)应用 drawtext 滤镜
以一个视频为例,在没有加字幕前,这个视频是这样的:
应用 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 200×200 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,并做一些惯例操作
间接装置 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
能够看到,默认装置下,曾经反对 lamemp3、x264、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.wav
ffmpeg -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。