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

你可能感兴趣的:(ffmpeg介绍与命令行基本用法)