[音视频开发]FFmpeg常用命令合集

FFmpeg常用命令分类:

  • 基本信息查询
  • 录制
  • 分解/复用
  • 裁剪与合并
  • 图片/视频互转
  • 直播
  • 处理原始数据
  • 滤镜

一. 基本信息查询命令

FFmpeg基本信息查询命令

二. 录制命令

FFmpeg录屏命令:

ffmpeg -f avfoundation -i 1 -r 30  out.yuv

-f avfoundation: 指定使用avfoundation采集数据
-i: 指定从哪儿采集数据,它是一个文件索引号,1代表是从屏幕采集
-r: 指定帧率
out.yuv表示以yuv格式输出
所以,上面的指令意思是:使用avfoundation以每秒30的帧率从屏幕采集视频。

输入上面指令后,就开始录制了,可以使用ctrl+c取消录制,再通过以下指令播放录制的视频:

ffplay out.yuv

结果报错:

Picture size 0x0 is invalid
out.yuv: Invalid argument

这是因为yuv原始数据没有宽高,要指定分辨率,从录制日志中可以查到:


所以播放指令变成:

ffplay -s 4096x2304 out.yuv

但是播放时出现了以下花屏的情况:

这是因为ffplay默认使用的像素格式是yuv420p:


而我们录制屏幕采用的像素格式是uyvy422:


像素格式不一致导致了无法正确渲染,所以需要另外指定录制时的像素格式。

ffplay -s 4096x2304 -pix_fmt uyvy422 out.yuv

指令输入后就能正常播放刚刚录制的屏幕视频了。

上面说了i是设备索引号,1代表的是从屏幕采集,实际上我们可以通过命令去列出设备索引号:

ffmpeg -f avfoundation -list_devices true -I ""

上面列出了我的电脑上的视频设备和音频设备,前面的数字就是索引号。可以看到视频、音频索引号都有0、1,那怎么区分呢,也很简单,录制音频指令,索引号放到冒号后边,如下:

ffmpeg -f avfoundation -i :0 out.wav

:0就代表音频设备:Built-in Microphone内置麦克风

录制结束也是ctrl+c。再通过以下指令来播放刚刚录制的音频:

ffplay out.wav

这样音频的录制与播放就完成了。

三. 分解与复用命令

FFmpeg分解与复用主要是文件格式的转换,以及分解出音频、视频文件等等。

  1. 比如,多媒体格式转换,将一个mp4文件转成flv格式:
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

-i out.mp4:输入一个名叫out的mp4文件。
-vcodec copy:视频编码处理方式。
-acodec copy:音频编码处理方式。

  1. 单独抽取音频流或视频流。
    如果只是想抽取视频流,可以用以下命令:
ffmpeg -i out.mp4 -an -vcodec copy out.h264

-an:不要音频。
同理,只抽取音频流:

ffmpeg -i out.mp4 -acodec copy -vn out.aac

四. 处理原始数据命令

所谓原始数据,就是FFmpeg解码后的数据。

  1. 提取视频原始数据。
ffmpeg -i out.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

-c:v:对视频进行编码。
rawvideo:编码格式按原来的格式。
pix_fmt yuv420p:像素格式是yuv420p。

note: 播放yuv格式的视频,要指定分辨率,如

ffplay -s 4096x2304 out.yuv
  1. 提取音频PCM原始数据。
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

-ar:音频采样率,常用的有48k、32k、16k等等。
-ac:音频声道,包括单声道、双声道、立体声、环绕立体声等等,上面-ac2是双声道。
-f s16le: 存储格式,s16是有符号16位来表示每个数值,le是little,它是一种存储方式。

然后播放提取的音频:

ffplay out.pcm

发现报错:



这是因为播放pcm原始音频数据并不知道采样率、声道这些信息,所以需要直接指定:

ffplay -ar 44100 -ac 2 -f s16le out.pcm

五. 滤镜命令

滤镜处理,比如加水印、去水印、画中画、视频裁剪、音频倍速等等,都可以通过滤镜命令实现。

滤镜处理是对解码后的原始数据帧进行处理,那解码后的数据如何得到呢,这就要先了解FFmpeg对音视频文件处理的流程:

  • 输入文件是一些具有封装格式的文件,经过demuxer分解解封装后,就得到了音频、视频等编码压缩数据。
  • 将这些编码数据包进行解码decoder,解码后就得到原始数据帧。
  • 再将解码后数据帧编码压缩成我们想要的大小,比如调整分辨率,720缩小变成480P的。
  • 重新muxer封装编码后的数据包成流行的格式并输出播放。

上面流程是一个完整的流程,其中得到的解码数据,如果进行滤镜处理,就要再经过下面的流程:

滤镜处理流程

解码后数据帧,经过滤镜程序过滤filter,得到过滤后的数据帧,再重新编码。

  1. 视频画面大小裁剪
ffmpeg -i water.mp4 -vf crop=in_w-300:in_h-150 -c:v libx264 -c:a copy out.mp4

-vf: 视频滤镜类型,-af就是音频滤镜类型。
crop=in_w-300:in_h-150:crop是滤镜名,等号后跟的是参数,本身视频的宽高上减去一定的值。
-c:v libx264:视频编码器是libx264。
-c:a copy:音频编码器是copy原来的,不作特殊处理。

note: 要先cd到原视频文件的目录下,再执行上面的命令。

六. 裁剪与合并命令

  1. 时长裁剪
ffmpeg -i water.mp4 -ss 00:00:00 -t 5 out.ts

-ss:裁剪起始时间
-t:总时长

  1. 多个视频片段进行合并
ffmpeg -f concat -i myInputsFile.txt out.mp4

-f concat:合并指令。
-i myInputsFile.txt:这里的myInputsFile.txt中存放的是多媒体文件列表,该txt文件中内容的格式是file filename,如下:

out.ts和out1.ts是本地两个视频文件,当然在合并时,要cd到当前要合并的视频文件目录下。

当然其他视频格式也可以合并,比如将两个mp4格式的视频合并,只需将文件名以上面的格式放到txt文件中即可。

七. 图片与视频互转命令

  1. 视频转图片
ffmpeg -i water.mp4 -r 1 -f image2 image-%3d.jpeg

-r:帧率,上面是以每秒1帧转出图片。
-f:转出格式,上面是image格式的,image2就是该格式的第二版。
image-%3d.jpeg:输出文件名,前缀是image,在加上3个数字的文件名。

  1. 图片转视频
ffmpeg -i image-%3d.jpeg imageVideo.mp4

将上面前缀为image的一组图片转成视频。

八. 直播推拉流命令

  1. 直播推流
ffmpeg -re -i water.mp4 -c copy -f flv rtmp://server/live/streamName

-re: 减慢帧率速度,本地音视频文件是以尽可能快的速度进行播放,加上re是为了让直播流尽可能与真实的帧率保持一致。
-c: 编解码方式,-ac是音频,-vc是视频。上面是copy,不作处理。
-f flv:推出文件格式。
rtmp://server/live/streamName:服务器地址。

  1. 直播拉流
ffmpeg -i rtmp://server/live/streamName -c copy myLive.flv

现在应用实战一下,比如我们先从湖南卫视直播源rtmp://58.200.131.2:1935/livetv/hunantv拉流,并保存到本地。

ffmpeg -i rtmp://58.200.131.2:1935/livetv/hunantv -c copy hunanTV.flv

ctrl + c,取消拉流保存到本地,现在播放一下保存的hunanTV.flv视频文件是可以播放的。
当然,也可以拉其他协议的视频流,下面是一些视频流的地址,可以换到上面试一下。

RTSP协议直播源

HTTP协议直播源

比如拉取CCTV3高清:

ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8 -c copy cctv3.m3u8

note:注意保存格式,拉取的是m3u8格式,所以存的也要是m3u8格式的。

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

推荐阅读更多精彩内容

  • 1.先通过下面命令查询Mac上有哪些设备 查询结果如下图所示,视频输入设备有2个:索引号0表示内置摄像头,1表示屏...
    一叶知秋0830阅读 3,068评论 0 0
  • FFMPEG常用命令 前言 [FFMPEG]是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频...
    JavaCodexPro阅读 621评论 0 0
  • 简要介绍 FFmpeg 介绍 音视频多媒体处理开源框架,采用LGPL或GPL许可证。 有音视频采集、编码、解码、转...
    Coder_TanJX阅读 1,205评论 0 1
  • FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具...
    小村医阅读 3,932评论 0 3
  • ffmpeg查询命令 常用命令 视频裁剪滤镜(播放器大小裁剪): ffmpeg -i killer.mp4 -vf...
    无神阅读 664评论 0 1