admin管理员组文章数量:1666594
FFmpeg
- 简介
- 轶闻
- 常用命令
- 视频相关
- 音频相关
- 录制命令
简介
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。使用C语言进行开发,采用LGPL或GPL许可证,可前往Github下载其源码。它提供了录制、转换以及流化音视频的完整解决方案。
前往其官网下载软件,将其添加到操作系统的环境变量中即可使用ffmpeg
、ffplay
以及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
版权声明:本文标题:FFmpeg命令介绍 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1726783243a1084492.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论