ffmpeg介绍与命令行基本用法

ffmpeg主要组成部分

1、libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含解复用器(demuxers)和复用器(muxer)库;

2、libavcodec:提供了通用的编码/解码框架,并包含用于音频,视频和字幕流的多个解码器和编码器;

3、libavutil:一些公共的工具函数,包含安全的便携式字符串函数,随机数生成器,数据结构,附加的数学函数,密码学和与多媒体相关的功能;

4、libswscale:高度优化的图像缩放以及色彩空间和像素格式转换操作,用于视频场景比例缩放、色彩映射转换;

5、libpostproc:用于后期效果处理,如图像去块效应、同步、时间计算的简单算法等;

6、libavdevice:提供了用于从许多常见的多媒体输入/输出设备获取和呈现的通用框架,并支持多种输入和输出设备,包括Video4Linux2,VfW,DShow和ALSA

7、libavfilter:是一个音视频滤镜(也有称过滤器或滤波器)库。用于实现声音图像的各种特效,如宽高比、裁剪、格式化、非格式化、伸缩、水印等等

8、libswresample:执行高度优化的音频重采样,采样频率转换,声道格式转换,样本格式转换。

9、ffmpeg:是一个命令行工具;

10、ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

image

1、FFmpeg程序把-i参数指定的若干文件内容读入到内存,按照输入的参数或者程序默认的参数来处理并且把结果写入到若干的文件中。输入和输出文件可以是计算机文件、管道、网络流、捕获设备等。

2、FFmpeg用libavformat包调用解复用器(demuxers)来读取输入文件中被编码的数据包(packets),如果有多个输入文件,FFmpeg以有效输入流的最小时间戳来同步,

3、然后解码器(decoder)从已编码的数据包中产生未被压缩的帧(frame),在那之后调用可选的过滤器。

4、这些帧被传递到编码器,编码器会产生新的编码包

5、把新的编码包传递给复用器(muxer)处理并且把结果写入到输出文件中。

本文章主要介绍ffmpeg 操作视频的基础命令


**主要参数:**

-i 设定输入流

-f 设定输出格式

-ss 开始时间

-c 指定编解码器

视频参数:

-b 设定视频的音视频码率(-b:v和-b:a),默认为200Kbit/s

-r 设定帧速率,默认为25

-s 设定分辨率,即画面的宽与高

-aspect 设定画面的比例

-vn 不处理视频

-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

-ss 开始时间

-t 持续时间

-bf B帧数目控制,

-g 关键帧间隔控制

 -preset 设置编码速度 

取值范围:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo

-tune  根据视频进行优化 

取值范围:film,animation,grain,stillimage,psnr,ssim,fastdecode,zerolantency

window录制桌面:

通过gdigrab来抓取屏幕

ffmpeg -y -video_size 1920x1080 -framerate 30 -f gdigrab -i desktop 
-offset_x 0 -offset_x  0 -c:v libx264 -b:v 200k   -pix_fmt yuv420p
 -preset ultrafast -t 00:00:10 -draw_mouse 0 capture.mkv

CRF(恒定速率因子),CRF标度的范围是0-51,其中0是无损的,默认是23,而51是可能的最差质量。较低的值通常会导致较高的质量,主观上合理的范围是17-28。该范围是指数级的,因此将CRF值增加+6会导致比特率/文件大小大约一半,而-6会导致比特率大约两倍

-framerate 设置帧率0-60

-b:v 设置视频的码率
视频清晰度主要由这三个参数设置。

分离视频音频流

分离视频流
将视频直接复制到输出文件,-an代表忽略音频

ffmpeg -i input_file -vcodec copy -an output_file_video

分离音频流
将视频的音频直接复制到输出文件,-vn代表忽略视频

ffmpeg -i input_file -acodec copy -vn output_file_audio

mp4转mp3(ffmpeg会根据后缀名自动生成相应格式的音频文件)

ffmpeg -i test.mp4 filename.mp3

合并音视频:
这里是直接使用了原有的音视频的格式

ffmpeg -i test.mp4 -i test.mp3 -vcodec copy -acodec copy output.mp4

合并视频:

有两个视频文件,名字如下,按照此格式编写进txt文档,MP4格式的视频不适合第二种合并方法,只能通过第一种方法,或者先将格式转换为其他的格式再进行合并。

image
ffmpeg -f concat -i name.txt -c copy output.mp4

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

转换格式:

以下第一条命令不指定其他任何参数,ffmpeg会根据输出后缀名自动的转成相应的视频格式,但是这样会造成视频失真,建议要带上码率,编码格式等参数。
第二个命令的-map代表使用第一个文件的流,如果有多个文件可以通过-map去匹配需要使用哪个文件的的音视频流 -map

ffmpeg -i test.mov output.mkv

ffmpeg -i test.avi -c copy -map 0 video.mp4

ffmpeg -i test.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2  video.mp4

//视频编码格式转换   转换成mpeg4,同理转换其他也一样
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

截图:

每秒截一张图:

ffmpeg -y -i capture.mkv -vf fps=1 out%d.png

fps为1时按一秒一帧切分,按s秒一帧来切,fps=1/s

每帧截一张图:

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg

截取指定时刻的图片

ffmpeg -i nice.mp4 -ss 00:00:14 -vframes 1 out.png

提取视频:

ffmpeg -ss 00:01:30 -t 0:00:50 -i test.mp4 -vcodec copy -acodec copy temp.mp4

ffmpeg -ss 00:01:30 -to 00:02:50 -i test.mp4 -vcodec copy -acodec copy temp.mp4

-t:持续多长时间

-to:到指定的时间时结束

压缩:

ffmpeg -i nice.mp4  -acodec copy -vcodec libx264 -crf 30  -b:v 2500k out.mp4

压缩视频主要是对视频的码率(-b:v)以及crf质量因子以及帧率进行调整,码率越小那么视频也响应的会越小。
如果我们想在已知的时间内限制视频的大小,那么就可以计算出相应的码率对视频进行压缩

视频文件体积:(音频码率+视频码率) x 时长 / 8

添加水印:

添加文字水印
drawtext=fontfile=C:\Windows\Fonts\simhei.ttf 代表要使用的字体
text=‘ekwing’ 需要添加的水印文字
x,y 代表水印的位置
shadowy代表水印的深度

ffmpeg -i concat.mp4 -vf "drawtext=fontfile=C:\Windows\Fonts\simhei.ttf: text=‘ekwing’:x=10:y=10:fontsize=24:fontcolor=red:shadowy=2" 
-max_muxing_queue_size 9999 -y  drawtext.mp4

添加图片水印:

overlay:水印参数,10:10代表显示在视频的位置X:Y
movie:后面接的就是图片的地址
-max_muxing_queue_size 是为了解决缓冲区内存不够的问题

ffmpeg -i concat.mp4  -vf "movie=1.jpg [watermark];[in][watermark] overlay=10:10[out]" -max_muxing_queue_size 9999 logo.mp4

去水印

delogo=x=10:y=10 水印的坐标,这里x,y最好不要同时为0
w,h 水印的宽高
show 为1时将在屏幕上绘制一个绿色矩形,一般为0没有边框

 ffmpeg -i down.mp4 -filter_complex "delogo=x=10:y=10:w=250:h=100:show=0" delogo.mp4

缩放视频:

-1代表自动按照原始比例缩放

ffmpeg -i logo.mp4 -vf scale=1366:-1 resize.mp4

ffmpeg源码以及可执行文件下载地址:https://ffmpeg.org/download.html

参考链接:
https://trac.ffmpeg.org/wiki
https://ffmpeg.org/ffmpeg.html

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