FFMPEG常用命令持续更新

这里通过软件MediaInfo来查看视频信息。其中黄色为帧数,红色为比特率

FFMPEG常用命令持续更新_第1张图片

基本用法:

  • 1除来上面我们通过软件来查看视频信息之外,我们还可以使用ffmpeg命令查看
ffmpeg -i vid.mp4
FFMPEG常用命令持续更新_第2张图片
image.png
  • 2 拆分视频为多张图片
ffmpeg -i vid.mp4 frame%03d.png   //%d也可以。支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI


03的%表示有三位,不够三位前面补充0,运行上面这行代码,该视频一共生成了329张图片

FFMPEG常用命令持续更新_第3张图片
image.png

我们可以手动指定每秒生成的图片数量

ffmpeg -i vid.mp4 frame%03d.png -r 20

这行命令表示每秒生成20张图片。我们还可以把生成的这些图片重新整合成视频。

ffmpeg -i frame%3d.png out.mp4
FFMPEG常用命令持续更新_第4张图片
image.png
FFMPEG常用命令持续更新_第5张图片
image.png

但是这样生成的视频,是没有声音的。但是之前的横屏播放,现在变成了竖屏播放。

  • 3从视频中提取音频文件保存为mp3
ffmpeg -i vid.mp4 -f mp3 outaudio.mp3
FFMPEG常用命令持续更新_第6张图片
image.png

但是生成的mp3时长超过了视频时长。

ffmpeg -i vid.mp4 -f mp3 -ar 44100 -ac 2 -ab 192 outaudio2.mp3

指定采样率44100,通道2立体声,码率192kbps

ffmpeg -i xiaguangcheng.mp4 -b:a 128k dest1.mp3   //mp3与原视频时长相等
ffmpeg -i xiaguangcheng.mp4 -f mp3 dest2.mp3   //mp3为原视频时长的两倍
ffmpeg -i xiaguangcheng.mp4 -f mp3 -ar 44100 -ac 2 -ab 128 xia2.mp3   //mp3为原视频时长的两倍
ffmpeg -i mothin.mkv -vn -ar 44100 -ac 2 -ab 128 -f mp3 xia3.mp3

  • 4将声音和无声视频 合并为有声视频
ffmpeg -i outaudio2.mp3 -i out.mp4 outav.mp4

经过这样的一翻转化之后,视频大小降低了不少


FFMPEG常用命令持续更新_第7张图片
image.png
  • 5视频封装格式转换

如果只是封装格式的简单转换,那么直接输出就可以

ffmpeg -i vid.mp4 vid.mkv

将mkv转码为mp4

ffmpeg -i vid.mkv -vcodec copy -acodec copy vid1.mp4

-vcodec copy 和 -acodec copy 表示所使用的视频和音频编码格式,为原样拷贝。

  • 6对视频切片操作
ffmpeg -i vid.mp4 -ss 00:00:03 -t 5 vid2.mp4

表示从vid.mp4的第三秒开始切割,长度为5秒,然后将切割出来的视频生成vid2.mp4.
这个操作还可以用来提供切片文件索引给h5用来做hls直播源。

ffmpeg -i vid.mp4 -strict -2 -c:v libx264 -c:a aac -f hls test.m3u8

主要把视频源切成若干个.ts格式的视频片段然后生成一个.m3u8的切片文件索引提供给html5的video做hls直播源

  • 7加减速视频
ffmpeg -i vid.mp4 -vf "setpts=0.5*PTS" vid3.mp4

但是发现这样的加速只是将视频画面加速了,但是视频声音并没有加速,因此本来14秒的视频,现在7秒就播放玩了,但是还有7秒却在播放原来最后7秒的声音。

ffmpeg -i vid.mp4 -vf "setpts=2.0*PTS" vid4.mp4

这个是减速视频

  • 8截取指定视频时间图片
ffmpeg -i vid.mp4 -y -f image2 -t 0.001 -ss 10 -s 1920x1080 haha.png

-f 指定格式
-t 延长时间
-ss 开始时间单位为秒
-s 生成图片规格

image.png
  • 9 转换为gif
ffmpeg -i vid.mp4 -vframes 5 -y -f gif out5.gif

这里是将视频的前5帧转换为gif


FFMPEG常用命令持续更新_第8张图片
out5.gif

将视频转换为gif

ffmpeg -ss 00:00:00.000 -i vid.mp4 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 out6.gif

将输入的文件从(-ss)设定的时间开始以10帧频率,输出到320x240大小的 gif 中,时间长度为-t 设定的参数。

out6.gif

也可以直接转,未压缩

ffmpeg -i vid.mp4 vid.gif
  • 10 将图片和声音合并为mpeg4编码方式分辨率为720p的avi文件
ffmpeg -i frame%3d.png -i silian.mp3 -s hd720 -vcodec mpeg4 out7.avi

这里有个问题,为什么我并没有设定合成视频的帧数,这些图片还是会合成之前分离出这些图片的那个视频的时间长度?

  • 11 设置输出文件帧数
ffmpeg -i vid.mp4 -r 1 outv1.avi

将vid.mp4 以帧数为1输出为outv1.avi。这样我们在观看outv1.avi的时候,就会发现每张图会停顿一秒,直至播放结束。

ffmpeg -r 1 -i vid.mp4 -r 24 outav3.avi

vid.mp4中的每帧图片都会在outav3.avi中播放一秒

  • 12 设置输出文件编码率
ffmpeg -i vid.mp4 -b:v 64k -bufsize 64k outav6.mp4

设置输出文件编码率 64 kbit/s

  • 13 添加水印
ffmpeg -i vid.mp4 -i icon.png -filter_complex overlay="(main_w/2)-(overlay_w/2):(main_h/2)-(overlay_h)/2" output222.mp4

在视频的中间位置添加一个水印。

FFMPEG常用命令持续更新_第9张图片
image.png
14 缩放视频
ffmpeg -i test.mp4 -vf scale=-1:480 -acodec aac -vcodec h264 test1.mp4

其中vf参数用来指定视频滤镜,其中scale表示缩放,后面的数字表示缩放至-1:480px。宽度和高度只需要指定一个就可以了,这里指定了宽度为480,高度会根据原视频的比例来计算。手机拍摄的视频一般都是音频为aac,视频为h264编码。另外音频还有faac编码。

15 录制网络视频
ffmpeg -i https://kangaiweishi.com/test2.mp4 -vcodec copy xiaguangcheng.mp4

可以将视频从“https://kangaiweishi.com/test2.mp4”这个网址里面copy下来。

FFMPEG常用命令持续更新_第10张图片
image.png
16 分离视频音频
ffmpeg -i xiaguangcheng.mp4 -vcodec copy -an abc.mp4  //分离出来的abc.mp4是没有声音的
ffmpeg -i xiaguangcheng.mp4 -acodec copy -vn edf.aac  //分离出来edf.aac的音频文件,但是播放不了
ffmpeg -i abc.mp4 -i edf.aac -vcodec copy -acodec copy xia.mp4 //这样播放的话,有画面也有声音
17 视频解复用 没懂什么意思
ffmpeg -i xiaguangcheng.mp4 -vcodec copy -an -f m4v xia.264
18 视频转码
ffmpeg -i xiaguangcheng.mp4 -vcodec h264  -s 352*278 -an -f m4v xia1.264

转码为码流原始文件,还是没懂

ffmpeg -i xiaguangcheng.mp4 -vcodec h264 -bf 0 -g 25 -s 352*278 -an -f m4v xia2.264  //-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制

转码为封装文件

ffmpeg -i xiaguangcheng.avi -vcodec mpeg4 -vtag xvid -qsame xia_xvid.avi  //这行命令执行不通过
19 ffmpeg 裁剪视频尺寸

如果视频为640x360的横向视频,我们要一个尺寸为360x360的正方形视频,那么我们就可以将横向视频进行裁剪。

ffmpeg -i xiaguangcheng.mp4 -strict -2 -vf crop=360:360:140:0 xiaxia.mp4
FFMPEG常用命令持续更新_第11张图片
640x360.png
FFMPEG常用命令持续更新_第12张图片
360x360.png

其中crop=width:height:x:y。因为只裁剪宽度,所以y为0,不用动,x=(640-360)/2=140;

20 转换视频格式
ffmpeg -i xiaguangcheng.mp4 -c:v libx264 -crf 30  xia12.avi

-crf是控制转码后视频的质量,0-51,值越小视频质量越高文件越大。建议值在18-28之间。

附录基本概念

比特率,就是每秒钟输出多少kb的参数。800Kbps表示没秒视频占用100KB空间大小。

帧数:单位fps,每秒钟播放的图片数。30fps流畅,50fps已经行云流水,60fps已经满足绝大多数要求。在同一视频同一码率情况下,帧数越大,画质越不好。因为每张画面会分担每秒有限的文件体积,如果画面越多,那么每张画面所能表现的内容就越有限。

分辨率和编码率的关系:同一码率,分辨率越高,图像马赛克越多。

采样率:单位赫兹Hz。音频文件一般使用的采样率为44100Hz,这是经过反复试验之后的结果。

MPEG格式   它的英文全称为Moving Picture Expert Group,即运动图像专家组格式,家里常看的VCD、SVCD、DVD就是这种格式。MPEG文件格式是运动图像压缩算法的国际标准,它采用了有损压缩方法从而减少运动图像中的冗余信息。MPEG的压缩方法说的更加深入一点就是保留相邻两幅画面绝大多数相同的部分,而把后续图像中和前面图像有冗余的部分去除,从而达到压缩的目的。目前MPEG格式有三个压缩标准,分别是MPEG-1、MPEG-2、和MPEG-4,另外,MPEG-7与MPEG-21仍处在研发阶段。   MPEG-1:制定于1992年,它是针对1.5Mbps以下数据传输率的数字存储媒体运动图像及其伴音编码而设计的国际标准。也就是我们通常所见到的VCD制作格式。这种视频格式的文件扩展名包括.mpg、.mlv、.mpe、.mpeg及VCD光盘中的.dat文件等。   MPEG-2:制定于1994年,设计目标为高级工业标准的图像质量以及更高的传输率。这种格式主要应用在DVD/SVCD的制作(压缩)方面,同时在一些HDTV(高清晰电视广播)和一些高要求视频编辑、处理上面也有相当的应用。这种视频格式的文件扩展名包括.mpg、.mpe、.mpeg、.m2v及DVD光盘上的.vob文件等。   MPEG-4:制定于1998年,MPEG-4是为了播放流式媒体的高质量视频而专门设计的,它可利用很窄的带度,通过帧重建技术,压缩和传输数据,以求使用最少的数据获得最佳的图像质量。MPEG-4最有吸引力的地方在于它能够保存接近于DVD画质的小体积视频文件。这种视频格式的文件扩展名包括.asf、.mov和DivX 、AVI等

RTSP协议支持实时播放,而Http协议则需要缓冲一定时间才能够播放。
参考:FFmpeg开发(一)常用处理视频命令

你可能感兴趣的:(FFMPEG常用命令持续更新)