2021-03-16 ffmpeg处理音视频

FFmpeg怎么念

FFmpeg念作ef ef em peg,其全称为 Fast Forward Moving Picture Expert Group

FFmpeg是什么

FFmpeg是一套领先的多媒体框架,是一套开源且跨平台的多媒体解决方案,提供了音视频的编码、解码、转码、封装、解封装、流媒体、滤镜、播放等功能,官网地址为 ffmpeg.org

FFmpeg可以用来干嘛

  • 视频播放器:很多视频播放器使用FFmpeg作为播放器内核,实现拉流、解封装、解码等功能,如射手播放器、暴风影音、QQ影音、KMPlayer、ijkplayer、MPlayer、VLC等,连Chrome浏览器的视频播放也使用了FFmpeg代码
  • 视频转换工具:基本上市面上做视频格式转换、视频压制的软件都基于FFmpeg来实现,比如格式工厂、小丸工具箱等

除了播放和转换,其他如音视频录制直播推流滤镜应用等很多场景都可以使用FFmpeg

FFmpeg的组成

使用FFmpeg有两种方式:

  • 命令行工具:FFmpeg提供了三个命令行工具直接进行多媒体处理

  • ffmpeg 转换多媒体文件格式

  • ffplay 基于SDL和FFmpeg库的简单媒体播放器

  • ffprobe 简单的多媒体流信息分析工具

  • 模块库:FFmpeg提供了一些模块库,供开发者进行二次开发

  • libavutil 提供一些基础的工具函数,比如随机数生成、基础数据结构、文件操作、MD5 SHA加密方法等

  • libavcodec 提供音视频的编码器、解码器,支持目前多媒体领域中绝大多数常用的编解码格式。除了自带的编码格式外,还支持第三方的编解码器,比如使用x264编解码器支持H.264/AVC编解码,使用x265编解码器支持H.265/HEVC编解码

  • libavformat 提供媒体格式的解封装和封装,支持目前多媒体领域中绝大多数媒体封装格式,包括RTMP、RTSP、HLS等流媒体协议封装和MP3、MP4、FLV、TS等媒体文件封装。还支持媒体封装格式扩展,增加自己定制的封装处理模块

  • libavdevice 提供音视频采集和渲染相关的输入/输出设备接口,兼容大部分通用多媒体输入/输出软件框架,比如Video4Linux、Video4Linux2、VfW、ALSA等

  • libavfilter 提供通用的音频、视频、字幕等滤镜处理框架

  • libswscale 提供深度优化的视频图像转换API,比如图像缩放(1080p转换成720p)、像素格式转换(yuv转rgb)等

  • libswresample 提供深度优化的音频重采样API,比如采样频率转换(44100Hz转换到8000Hz)、声道格式转换(立体声转换为单声道)、样本格式转换(s16的PCM数据转换为f32的PCM数据)等

FFmpeg基础使用示例

  • 视频格式转换:比如将avi文件转成mp4格式
    ffmpeg -i input.avi output.mp4
  • 视频剪切:比如从时间为00:00:15开始,截取5秒钟的视频 (-ss表示开始切割的时间,-t表示要切多少)
    ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
  • 提取音频:比如将一个MV变成音频文件 (-vn 不处理视频)
    ffmpeg -i 千千阙歌现场版.mp4 -acodec copy -vn output.aac
  • 提取视频:比如将一个视频去除音频 (-an 不处理音频)
    ffmpeg -i input.mp4 -vcodec copy -an output.mp4
  • 视频加水印:比如给视频右上角加上淘宝直播图片水印
    ffmpeg -i input.mp4 -i 淘宝直播_logo.png -filter_complex overlay output.mp4
  • 视频缩放:比如将1920x1080分辨率的视频缩小到960x540
    ffmpeg -i input.mp4 -vf scale=960:540 output.mp4

前端和FFmpeg有什么关联

  • JS播放器:可以基于FFmpeg和WebAssembly实现浏览器端的JS播放器,或扩展浏览器端其他的音视频能力,更多详情可参考 《Web端H.265播放器研发解密
  • Node模块 fluent-ffmpeg:node.js中非常实用的模块,该模块简化了ffmpeg复杂的命令操作,且配合文件上传以及视频流的处理等非常实用,更多详情可参考 fluent-ffmpeg

安装

brew install ffmpeg

参数说明

常用参数

-i 设定输入流
-f 设定输出格式
-ss 开始时间

视频参数

-b 设定视频流量(码率),默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

音频参数

-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

常用命令

提取音频

ffmpeg -i mov_bbb.mp4 -acodec copy -vn output.aac

-vn 不处理视频

提取视频

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

-an 不处理音频

合并音频和视频

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4

合并两个音频

ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 output.mp3

视频格式转换

ffmpeg -i input.avi output.mp4

视频编码格式转换

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

视频剪切

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4

-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

码率控制

可以间接控制文件大小,有三种方式:

ffmpeg -i input.mp4 -b:v 2000k output.mp4
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

码率:bitrate = file size / duration
一个文件20.8M,时长1分钟,那么,码率就是:
biterate = 20.8M bit/60s = 20.810241024*8 bit/60s= 2831Kbps
一般音频的码率只有固定几种,比如是128Kbps, 那么,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。

缩小视频

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

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

scale=960:-1,会保持原始宽高比等比缩小

为视频添加logo

ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
image.png

去掉视频logo

ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4

-vf delogo=x:y:w:h[:t[:show]]
x:y 离左上角的坐标
w:h logo的宽和高
t: 矩形边缘的厚度默认值4
show:若设置为1有一个绿色的矩形,默认值0。

抓取视频的一些帧,存为jpeg图片

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

ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

-ss 表示开始时间
-t表示共要多少时间
-r 表示每一秒几帧
-q:v表示存储jpeg的图像质量,一般2是高质量

提取两个声道

ffmpeg -i music.mp3 -map_channel 0.0.0 letf.aac -map_channel 0.0.1 right.aac

双声道合并单声道

ffmpeg -i music.mp3 -ac 1 music.aac

视频转gif

ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif

-t参数表示提取前10秒视频
-s 表示按照 320x240的像素提取

我用它解决了什么问题

有个视频在android手机里播放时有画面和背景音,但是没有配音。

具体解决步骤:

ffmpeg -i input.mp4 -acodec copy -vn output.aac
ffmpeg -i input.mp4 -vcodec copy -an silent.mp4
ffmpeg -i output.aac -map_channel 0.0.0 letf.aac -map_channel 0.0.1 right.aac
ffmpeg -i silent.mp4 -i letf.acc -c:v copy -c:a aac -strict experimental output.mp4
ffmpeg -i output.mp4 -ar 44100 output-1.mp4

参考文档:
https://www.jianshu.com/p/ddafe46827b7
https://blog.csdn.net/newchenxf/article/details/51364105
https://cloud.tencent.com/developer/article/1531167

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容