乐趣区

关于ffmpeg:多媒体开发4在视频上显示文字或图片ffmpeg命令

小白:我录了段视频,外面用的音乐是有版权的,而且快过期了,能把音乐去掉吗?

小程拿到视频后,一个快捷键关上命令终端,疾速打下一行命令:

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。

退出移动版