FFmpeg命令介绍

简介

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。使用C语言进行开发,采用LGPL或GPL许可证,可前往Github下载其源码。它提供了录制、转换以及流化音视频的完整解决方案。

前往其官网下载软件,将其添加到操作系统的环境变量中即可使用ffmpegffplay以及ffprobe分别进行音视频的处理、播放和信息查看。

轶闻

耻辱柱事件

简而言之,许多播放器使用了FFmpeg的代码或模块但没有遵守LGPL/GPL协议,FFmpeg将许多不遵守协议的播放器发布在其官网页面上,名为Hall Of Shame,故称为耻辱柱事件,其页面现已停止更新。

涉及耻辱柱事件的播放器包括国内的暴风影音、QQ影音,甚至还有著名的KMplayer和Potplayer。以下为网上流传的信息:

FFmpeg耻辱柱(Hall Of Shame):

由于FFmpeg是在LGPL/GPL协议下发布的(如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议),任何人都可以自由使用,但必须严格遵守LGPL/GPL协议。目前有很多播放软件都使用了FFmpeg的代码,但它们并没有遵守LGPL/GPL协议,没有公开任何源代码。我们应该对这种侵权行为表示耻辱。

2009年加入FFmpeg的播放软件:暴风影音、QQ影音、KMP都在其列。

2009年2月,韩国名软KMPlayer被FFmpeg开源项目发现使用了它们的代码和二进制文件,但是没有按照规定/惯例开放相应说明/源码。因此被人举报,进入了FFmpeg官网上的耻辱黑名单。

2009年5月,网友cehoyos下载了暴风影音软件,解压之后发现其安装程序内包含了大量的开源和私有解码器:avcodec,avformat,avutil,x264,xvid,bass,wmvdmod等,之后暴风影音被正式加入到FFmpeg耻辱名单。

2009年11月,网友roo_zhou向FFmpeg举报,指出QQ影音的credit只给出了修改的FFmpeg源码下载,声称是LGPL许可证。但实际是修改过的ffdshow,采用的是GPL许可证,之后QQ影音被正式加入到FFmpeg耻辱名单之列。

Libav政变

在原FFmpeg社区中部分开发者相比维护更倾向于开发,不满与现有项目管理形式,于是发生了一次政变,占领了FFmpeg,其结果最后是这部分开发者最后创立了一个新分支名为Libav进行开发。

2011年1月19日,FFmpeg 的现任维护者 Michael Niedermayer 在邮件列表上披露,FFmpeg 发生了“政变”,一些开发者占领了官方网站,关闭了其他人的写入权限。随后政变者宣布 FFmpeg “建立新政权”,维护任务将由他们接手,宣称只有维护团队才能拥有主源码库的写入权限。

“新内阁”成员之一的 Diego Biurrun 解释了他们的行动,称“政变”是迫不得已,表示他们原本想联络每一个开发者,但没成功,因为不是每个人都在IRC上,或者能及时回电话、邮件或短信。“革命”的原因是为了统一,FFmpeg 社区分裂的情况严重到他们已经看不下去了。他们期望FFmpeg项目能建立一个健康而友好的开发环境。

这个项目最初是由Fabrice Bellard发起的,而现在是由Michael Niedermayer在进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员,FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。

2011年3月13日,Fabrice Bellard等人于2011年3月13日跳出去开新项目,称作Libav,同时制定了一套关于项目继续发展和维护的规则。事实上ffmpeg并未改名。

常用命令

视频相关

格式转换

# 命令: ffmpeg -i source target
# 例如avi转mp4
ffmpeg -i input.avi output.mp4

提取视频

从视频中提取音频

# 命令: ffmpeg -i input -acodec type -vn output
# 例如mp4提取音频一般为aac,某些格式可能会报错
ffmpeg -i input.mp4 -acodec aac -vn output.aac

提取音频

只保留视频而不保留音频

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

视频剪切

大家常用用一些软件剪切视频,而FFmpeg也可以办到

# 从时间为00:00:15开始,截取5秒钟的视频
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4

添加字幕

通过ffmpeg为视频添加字幕

# mp4添加软字幕
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4
# mkv添加软字幕
ffmpeg -i input.mkv -i subtitles.srt -c copy output.mkv
# 硬字幕
ffmpeg -i end_font.mp4 -vf subtitles=words.srt -y output.mp4

码率控制

一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率

# 将码率将为2Mbps
ffmpeg -i input.mp4 -b:v 2000k output.mp4

ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize,用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。

# 设置为码率在2Mpbs波动
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate最小码率,-maxrate最大码率

# 码率最大不超过2500k
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

编码转换

比如一个视频的编码是MPEG4,转换为H264编码

ffmpeg -i input.mp4 -vcodec h264 output.mp4

修改分辨率

将输入的1920x1080缩小到960x540输出

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4

添加图片

可以用于给视频添加logo

# 将图片添加到视频中,默认在左上角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4
# 右上角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
# 左下角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
# 右下角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4

局部打码

可用于一些网站logo打码

# 语法:-vf delogo=x:y:w:h[:t[:show]]
ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4

截取画面

# r表示每一秒几帧,-q:v表示存储jpeg的图像质量,一般2是高质量。
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

如此,ffmpeg会把input.mp4,每隔一秒,存一张图片下来。

# -ss表示开始时间,-t表示共要多少时间
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

如此,ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧。

视频拼接

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

音频相关

格式转换

和视频格式转换基本一致

ffmpeg -i input.mp2 output.wav
# 转换过程中也可以指定其他参数
ffmpeg -i null.ape -ar 44100 -ac 2 -ab 16k -vol 50 -f mp3 null.mp3
-i代表输入参数
-acodec aac(音频编码用AAC) 
-ar 设置音频采样频率
-ac  设置音频通道数
-ab 设定声音比特率
-vol <百分比> 设定音量

音频合成

# 直接拼接
ffmpeg -i "concat:input1.mp3|input2.mp3|input3.mp3" -c copy output.mp3
# 或者混合在一起
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT

音视频合成

如果音频比视频长,就会停在最后一帧继续播放音频

ffmpeg -i a.wav  -i a.avi out.avi

截取音频

ffmpeg64.exe -i 124.mp3 -vn -acodec copy -ss 00:00:00 -t 00:01:32 output.mp3

录制命令

FFmpeg也可以用于录制视频音频

录制屏幕

# 录制屏幕,输出到d:/out.mp4
ffmpeg -f gdigrab -i desktop -f mp4 d:/out.mp4
# -r设置帧率

此命令用于录制视频,无法录制声音,按q退出

录制音频

# 查看设备
ffmpeg -f dshow -list_devices true -i dummy

执行完看到如下结果

设备

# 录制麦克风
ffmpeg -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -acodec libmp3lame audio.mp3
# 录制系统声音,立体声看不见可能是被禁用了
ffmpeg -f dshow -i audio="立体声混音 (Realtek High Definition Audio)" -acodec libmp3lame audio.mp3

同时录制音频视频

# 录制屏幕和系统声音
ffmpeg -f dshow -i audio="立体声混音 (Realtek High Definition Audio)" -f gdigrab -i desktop -f mp4 d:/out.mp4
# 录制屏幕和麦克风
ffmpeg -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -f gdigrab -i desktop -f mp4 d:/out.mp4
  • 22
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值