音视频开发之旅(31) -FFMPEG常用命令

目录

  1. 播放器ffplay常用命令
  2. 多媒体分析器ffprobe常用命令
  3. 编解码工具ffmpeg常用命令
  4. 资料
  5. 收获

FFMPEG是一个跨平台的音视频音视频处理的开源套件,我们的学习实践路线如下:
首先使用PC上使用熟悉基本的常用命令;
再交叉编译android平台上使用的ffmpeg;
最后在代码层面学习ffmpeg的代码结构以及具体实现。

本篇,我们先来熟悉ffmpeg的常用命令,先从直观上了解ffmpeg能做什么。

使用FFMPEG之前,我们要先安装对应的应用程序,可以采用从ffmpeg官网上下载源码进行配置编译使用,也可以采用直接安装对应的应用程序,

Mac/Linux平台可以通过如下方式安装编译

1. 在yasm官网http://yasm.tortall.net/Download.html 下载yasm
2. 配置yasm
3. make 编译yasm
4. make install 安装yasm
5. 在官网http://ffmpeg.org/ 下载ffmpeg
6. 配置ffmpeg
7. make编译
8. make install 安装ffmpeg

Mac下也可以通过brew安装ffmpeg

brew iinstall ffmpeg --with-ffplay

我们可以通过后者快速安装ffmpeg,先了解ffmpeg能做什么,再来编译或者交叉编译生成对应的ffmpeg命令。

一、播放器ffplay常用命令

ffplay是以FFMPEG框架为基础,外加SDL构建的多媒体播放器。 支持各种格式的音视频的播放,包括各种封装格式的音视频、以及裸音频pcm或者裸yuv数据,也可以设置音视频同步的方式(以音频为基准、以视频为基准、外部时钟)、播放时可以设置循环模式
下面我们来具体实践

1.1 播放音频数据

ffplay music.mp3
播放音频可以通过快捷键w切换显示模式


通过快捷键q退出播放

1.2 播放视频数据

ffplay video.mp4

如果想循环播放可以通过loop来指定循环次数

ffplay video.mp4 -loop 3

1.3 播放yuv数据

使用ffplay播放yuv原始数据表示的视频图片,要告诉ffplay视频的格式、大小、类型,如下所示:

ffplay -f rawvideo -s 640x480 -pix_fmt yuv420p yuv.yuv

从mp4中提取出对应的yuv数据,可以通过

ffmpeg -i video.mp4 -s 640x480 -pix_fmt yuv420p yuv.yuv

1.4 设置音视频同步方式

音视频常用的方案有三种 以音频为基准(默认)、以视频为基准、以外部时钟为基准。

ffplay video.mp4 -sync audio
ffplay video.mp4 -sync video
ffplay video.mp4 -sync ext

二、多媒体分析器ffprobe常用命令

ffprobe 的是FFMPEG提供的多媒体探测分析工具,可以分析格式音视频的信息

ffprobe music.mp3

-->
Duration: 00:04:28.62, start: 0.025057, bitrate: 320 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
    Metadata:
      encoder         : LAME3.99r

通过上面信息可以看到
音乐时长信息:Duration: 00:04:28.62;
开始时间:start: 0.025057
比特率:320 kb/s
流的类型:Stream #0:0: Audio: mp3
采样率:44100 Hz
声道:stereo

同样的我们可以通过ffprobe来查看视频的信息

ffprobe video.mp4

-->

Duration: 00:03:25.75, start: 0.000000, bitrate: 629 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 496 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)

    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)

我们可以看到视频有两个流:Stream #0:0(und): Video 视频流和Stream #0:1(und): Audio音频流。
分辨率:640x480
帧率:24 fps
视频编码格式: h264 (High) (avc1 / 0x31637661),
图像存储方式:yuv420p

三、编解码工具ffmpeg常用命令

ffmpeg命令可以转化各种格式的多媒体文件。
按照功能分类可以分为如下常用几种类型

  1. 信息查询部分
  2. 通用参数
  3. 视频参数
  4. 音频参数

可以通过ffmpeg --help查看支持的上述命令
查询参数的部分如下:

-formats            show available formats
-muxers             show available muxers
-demuxers           show available demuxers
-devices            show available devices
-codecs             show available codecs
-decoders           show available decoders
-encoders           show available encoders
-bsfs               show available bit stream filters
-protocols          show available protocols
-filters            show available filters
-pix_fmts           show available pixel formats
-layouts            show standard channel layouts
-sample_fmts        show available audio sample formats
-colors             show available color names

比如可以通过ffmpeg -codecs查看支持的编码类型

下面重点说下通用类型、音频参数和视频参数

3.1 通用参数

-i filename  指定输入文件名  
-y           覆盖同名的输出文件
-f fmt       指定音/视频的格式
-t duration  指定输出音/视频的时长,单位秒
-to time_stop 指定输出音/视频结束点,单位秒
-fs limit_size  限定输出文件大小
-ss time_off    指定输出音/视频的开始时间点,单位秒,也支持hh:mm:ss的格式

3.2 音频参数

-aq quality   指定输出音频的质量
-ar rate      指定音频采样率 (单位 Hz)
-ac channels  指定音频声道数量
-an           输出的文件不带音频
-acodec codec 指定输出的音频编码类型('copy' to copy stream)
-vol volume    指定音频的音量 (256=normal)
-af filter_graph    指定音效
-ab    指定输出音频的比特率

3.3 视频参数

-r rate   指定帧率 (单位Hz )
-s size   指定分辨率 (WxH)
-aspect aspect  指定宽高比(4:3, 16:9 or 1.3333, 1.7777)
-vn           指定输出文件不包含视频
-vcodec codec 指定输出视频的编码格式 ('copy' to copy stream)

-vf filter_graph 指定视频滤镜
-ab bitrate      指定音频比特率 (please use -b:a)
-b bitrate   指定比特率,若指定该值为平均比特率 (please use -b:v)
-vb 指定视频比特率

下面来看下一些比较常用的命令事例

1. flac格式 --》转成mp3

ffmpeg -i in.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3

输入的音频文件为in.flac,指定编码格式为libmp3lame(即mp3的编码库),音频采样率44100,比特率为320kb/s,声道数量为2,输出文件为out.mp3

2. 转换视频格式

ffmpeg -i in.mov -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4

码率控制模式: -qp -crf -b

-qp(Constant Quantizer)恒定量化器模式
-crf(Constant Rate Factor) 恒定速率因子模式
-b (bitrate) 固定目标码率模式

VBR(Variable Bit Rate)动态比特率 简单的给少些码率、负责的多放些码率

CBR(Constant Bit Rate)恒定比特率 在vbr的基础上改进 码率固定在一个值上

3. 提取视频

ffmpeg -i in.mp4 -vcodec copy -an v.mp4

还可以从视频文件中直接提取出裸h264数据
ffmpeg -i in.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb out.h264
其中mp4toannexb是一种bitmapfilter类型

4. 提取音频

ffmpeg -i in.mp4 -vn -acodec copy a.m4a

如果多个音频流 通过 -map 0:3来分别提取

eg
Stream #0:2[0x81]:Audio:ac3,48khz,5.1,s16,384kb/s
Stream #0:3[0x82]:Audio:ac3,48khz,5.1,s16,384kb/s
Stream #0:4[0x80]:Audio:ac3,48khz,5.1,s16,384kb/s

再合并回去

ffmpeg -i a.m4a -i v.mp4 -c copy out.mp4

5. 截取

ffmpeg -i in.mp3 -ss 00:01:00 -to 00:10:00 -acodec copy out.mp3
或者
ffmpeg -i in.mp3 -ss 00:01:00 -t 10 -acodec copy out.mp3

把-ss放在-i之前,ffmpeg会启用关键帧技术,加速它的操作,但这样提取出来的时期,在播放时显示的
起止不一定准确,可以通过 -copyts 拷贝时间戳,保证时间的正确性

ffmpeg -i in.mp3 -ss 00:01:00 -to 00:10:00 -acodec copy out.mp3
ffmpeg  -ss 00:01:00 -i in.mp3 -to 00:10:00 -acodec copy out.mp3
ffmpeg  -ss 00:01:00 -i in.mp3 -to 00:10:00 -acodec copy-copyts out.mp3

还可以截取多个文件

ffmpeg -i video.mp4 -t 00:00:50 -c copy small-1.mp4 -ss 00:00:50 -t 10 -codec copy small-2.mp4 -y

6. 把多个视频连接成一个视频
多个视频的宽高、码率一致

ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4

如果参数不一致推荐使用Avidemux这款软件处理

7. 截图

ffmpeg -i in.mp4 -ss 5 -vframes 1 img.jpg

上述指令是指 在第五秒截图

还可以采用更加方便的方式截一系列的图

ffmpeg -i in.mp4 -r 0.25  frames_%04d.png

上述命令指定每4秒截取一帧画面生成一张图片,

8. 水印

ffmpeg -i in.mp4 -i logo.png -filter_complex "overlay=20:20" out.mp4

通过两个-i指定两个输入源,一个是视频,一个是水印,通过filter_complex指定水印的位置_

9. 动图

ffmpeg -i in.mp4 -ss 7.5 -to 8.5 -s 640x320 -r 15 out.gif

指定分辨率为640x320,帧率为15

或者可以通过如下命令指定宽高

ffmpeg -i in.mp4 -vf scale=100:-1 -t 5 -r 10 out.gif

宽高比不变,宽度指定为100

还可以把一组图片生成一张动图

ffmpeg -i frames_%04d.png -r 5 out.gif

10.淡入淡出效果
给一个音频做一个淡入的效果,可以通过如下命令

ffmpeg -i music.mp3 -filter_complex afade=t=in:ss=0:d=5 music11.mp3

前5秒做个淡入效果

淡出效果可以采用如下命令

ffmpeg -i music.mp3 -filter_complex afade=t=out:st=200:d=5 music22.mp3

从200秒开始做5秒的淡出效果

11. 倍速
两倍速处理音频

ffmpeg -i music.mp3 -filter_complex atempo=2 out1.mp3 -y

0.5倍速处理音频

ffmpeg -i music.mp3 -filter_complex atempo=0.5 out1.mp3 -y

12.混音
将两个声音进行合并

ffmpeg -i music.mp3 -i bg.mp3 -filter_complex amix=inputs=2:duration=shortest out.mp3

四、资料

《FFmpeg从入门到精通》
《音视频开发进阶指南》
【FFmpeg 分P教学】转码、压制、录屏、裁切、合并、提取 … 统统不是问题。
基于FFmpeg+SDL的视频播放器的制作——雷霄骅

收获

  1. 了解ffplay常用命令的使用
  2. 了解ffprobe的使用
  3. 了解ffmpeg常用命令
  4. 学习实践常用命令的使用场景

感谢你的阅读

下一篇我们学习实践“交叉编译android平台使用的ffmpeg”,欢迎关注公众号“音视频开发之旅”,一起学习成长。

欢迎交流

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

推荐阅读更多精彩内容