FFmpeg常用命令

记录一下工作中常用的FFmpeg命令及其参数的解释,以例子的形式记录,某些参数可以组合使用。详细的用法请参考FFmpeg Documention

查看可用编解码器等信息

FFmpeg由于版本的不同,可支持的编解码器的名称及功能可能不一样,遇到问题时可以查一下

  • 可用的编解码器
    ffmpeg –codecs
  • 可用的解码器
    ffmpeg –decoders
  • 可用的编码器
    ffmpeg –encoders
  • 可用的过滤器
    ffmpeg –filters
  • 可用的视频格式
    ffmpeg –formats
  • 可用的协议
    ffmpeg -protocals

基础用法

ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy -y -f mp4 OUTPUT
  • -i 源输入,可以是文件,也可以是网络源地址,ffmpeg可以有多个输入源,如ffmpeg -i INPUT -i INPUT -i INPUT ……
  • -map 指明对某个文件的某个流进行操作,因为输入文件可以有多个,文件也可以有多个音视频流,-map 0表示对第一个文件的所有流进行处理,-map 0:1表示对第一个文件的第二个流进行处理,注意计数从0开始
  • -c:v 指明输出文件的视频编码,等同于-codec:v,等同于-vcodeclibx264即H.264编码器,若不想对视频重新编码,即保持原视频的编码,则后面跟copy
  • -c:a 指明输出文件的音频编码,用法同上,等同于-codec:a,等同于-acodec
  • -y 表示输出时如果相同文件名的文件已经存在,则直接覆盖,不用询问;相反-n表示遇到此情况时立即退出
  • -f 指明输出文件的封装格式,如mp4flv

直接推流mp4文件

ffmpeg -re -i INPUT.mp4 -c copy -f flv rtmp://……
  • -c copy 表示音视频保持原有编码

本地文件重新编码并同时进行rtmp推流

ffmpeg -re -i INPUT -acodec aac -ac 2 -ar 44100 -ab 128k -vol 3000 -vcodec libx264 -vb 800k -s 360*640 -r 24 -b 928k -f flv rtmp://……
  • -re 表示以原生帧率读取数据。一般情况下ffmpeg会以尽可能快的速度读取数据,所以推流文件的话要加上此参数,如果是转推直播流的话,不用加此参数
  • -ac 设置音频编码声道数
  • -ar 设置音频编码采样率,单位kHz,如44100, 24000, 16000等
  • -ab 设置音频码率,也可以写作-b:a
  • -vol 设置音频音量为原音频的多少倍,3000表示为原来的3000%,即30倍
  • -vb 设置视频码率,等同于-b:v
  • -s 设置视频分辨率,参数格式为w*hw×h
  • -r 设置帧率(fps)
  • -b 设置总码率,分别设置了音视频码率后通常省略

对视频画面旋转90°

ffmpeg -i INPUT -acodec copy -vcodec libx264 -b 800k -vf transpose=1 OUTPUT
  • -vf 表示对视频应用Video Filter,可应用多个filter,中间用,隔开并用""包起来
  • transpose Video Filter的一种,表示对视频画面进行旋转、翻转变换
    • transpose=0 表示先逆时针旋转90°,再垂直翻转
L.R     L.l
. . ->  . .
l.r     R.r
  • transpose=1 表示顺时针旋转90°
L.R     l.L
. . ->  . .
l.r     r.R
  • transpose=2 表示逆时针旋转90°
L.R     R.r
. . ->  . .
l.r     L.l
  • transpose=3 表示顺时针旋转90°,再垂直翻转
L.R     r.R
. . ->  . .
l.r     l.L

修改视频分辨率并添加黑边

ffmpeg -i INPUT  -vf "scale=640:360,pad=640:1138:0:389:black" -acodec copy -vcodec libx264 -s 640*1138 -b 800k OUTPUT

现将视频分辨率压缩到640×360,再给视频加上黑边,最终视频分辨率改为640×1138

  • scale Video Filter的一种,设置视频分辨率,假设分辨率要设置成200×100,使用方法如下:
scale=200:100

等同于

scale=200x100

等同于

scale=w=200:h=100

当宽或高的值为-1时,表示维持原有宽或高
还可以使用一些常量定义,iwihowoh,分别表示输入宽、输入高、输出宽、输出高,假设要缩小到原来的1/2,则可以用

scale=iw/2:ih/2

假设要宽度变成原来的2/3,高度和最后的宽度一样,则可以用

scale=2/3*iw:ow
  • pad Video Filter的一种,设置视频边框,使用方法为
pad=w:h:x:y:color

w、h表示输出的宽、高,x、y表示原视频画面在最终输出画面中的左上角位置,color表示边框的颜色,默认是black,其余颜色请参考FFmpeg颜色定义

裁减视频画面

ffmpeg -i INPUT -vf crop=995:1080:540:0 -acodec copy -vcodec libx264 -f mp4 OUTPUT
  • crop=w:h:x:y Video Filter的一种,表示裁切画面,从(x, y)的位置开始取w×h大小的画面

截取视频生成Gif

从视频25s处开始,截取10s长度的画面生成320x240大小、帧率为15fps的Gif

ffmpeg -ss 25 -t 10 -i INPUT -s 320x240 -f gif -r 15 OUTPUT.gif
  • -ss 表示从输入文件开始读取的时间位置,也就是开始截取的时间点,参数格式为HH:MM:SS.mmm,小时和分钟可以省略,截取的时间点不是完全精准的
  • -t 表示截取的时间长度,即duration,也可以使用-to,表示截取的截止时间点,配合-ss来定义截取的长度
  • -r 表示输出帧率

截取视频内任意时间点的一帧图像保存为JPEG文件

ffmpeg -ss 16.1 -i INPUT -s 320x240 -vframes 1 -f image2 OUTPUT.jpeg
  • -vframes 设置要输出的帧的个数,等同于-frames:v
  • -f image2 表示封装格式为image2类型,image2为FFmpeg中的图片封装格式名称

抽取帧序列,再生成Gif

从源视频中每秒钟抽取5帧图像,保存为一系列JPEG文件

ffmpeg -ss 25 -t 10 -i INPUT -r 5 -s 320x240 -f image2 D:\result-%03d.jpeg
  • D:\result-%03d.jpeg 自动按序号命名输出

将这一系列JPEG图像合成为帧率5 fps的GIF文件

ffmpeg -f image2 -framerate 5 -i D:\result-%03d.jpeg OUTPUT.gif
  • -framerate 表示每秒读取多少帧,与-r好像不同,读取图片类型时最好用这个

生成高质量Gif

上述方法生成的Gif画质比较一般,下面的方法可生成更高质量的Gif,windows平台下将下面代码存为bat文件执行即可

@echo on
set start_time=00:00:10
set duration=5
set palette="D:\tmp\palette.png"
set filters="fps=15,scale=270:-1:flags=lanczos"
ffmpeg -v warning -ss %start_time% -t %duration% -i INPUT -vf "%filters%,palettegen" -y %palette%
ffmpeg -v warning -ss %start_time% -t %duration% -i INPUT -i %palette% -lavfi "%filters% [x]; [x][1:v] paletteuse" -y OUTPUT.gif
pause

中间要生成一个调色板文件D:\tmp\palette.png,再利用此调色板生成Gif,具体原理请参阅使用FFmpeg处理高质量GIF图片

剪切视频

ffmpeg -ss 00:00:20 -t 00:00:30 -i INPUT -c copy OUTPUT

精确剪切mp4视频

ffmpeg -i input.mp4 -qscale 0 -intra temp.mp4
ffmpeg -ss 00:00:30 -vsync 0 -t 00:00:30 -i temp.mp4 -acodec libvo_aacenc -vcodec libx264 output.mp4
  • -qscale Use fixed quality scale (VBR),即使用动态码率,值越小质量越高
  • -intra 表示使用帧内编码
  • -vsync 视频同步方法,0表示:Each frame is passed with its timestamp from the demuxer to the muxer.

将一张图片转成任意时长的视频

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

推荐阅读更多精彩内容

  • 写在前面: 今天往移动硬盘上拷电影的时候忽然遇见文件过大无法拷贝的问题。因为一个移动硬盘如果分区为NTFS格式,那...
    vincentgemini阅读 14,206评论 0 9
  • 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_fi...
    XLAccount阅读 3,063评论 0 8
  • 这里通过软件MediaInfo来查看视频信息。其中黄色为帧数,红色为比特率 基本用法: 1除来上面我们通过软件来查...
    夏广成阅读 7,954评论 1 7
  • 雨中漫步,伞是移动的风景,你是孤寂的精灵。 孤寂的是身影,放飞的是思绪。风是柔的,雨是绵的,你只是温暖着一...
    杨礼生阅读 643评论 0 5
  • 这个单元的内容是-----价格。 开课前薛老师先要带我们去看个热闹。是经济学史上非常重要的辩论,我们可以欣赏经济学...
    AmberShao阅读 1,334评论 0 1