FFmpeg常用指令

目录

1. 视频

1)视频转换

2)视频压缩

3)提取音频

4)提取视频

5)视频裁剪

6)控制码率

7)视频编码格式转换

8)只提取视频ES数据

9)将输入的1920x1080缩小到960x540输出:

10)截取视频图像

11)序列帧与视频的相互转换

2.音频

1)音量调节

 

2)音频拼接

3)音频截取

4)音频合成


-i 输入文件
-acodec 使用codec编解码
copy 拷贝原始编解码数据
-vn 不做视频记录(只提取音频)
-y 直接覆盖(如果目录下相同文件名字)

1. 视频

1)视频转换

一个avi文件,想转为mp4,或者一个mp4想转为ts。 

ffmpeg -i input.avi output.mp4 
ffmpeg -i input.mp4 output.ts

2)视频压缩

"-y -i " + invideoPath+ " -strict -2 -vcodec libx264 -preset ultrafast " 
+ "-crf 30 -acodec aac -ar 44100 -ac 2 -b:a 96k -vf scale=-2:800 " + outputPath;

3)提取音频

ffmpeg -i test.mp4 -acodec copy -vn output.aac 
上面的命令,默认mp4的audio codec是aac,如果不是,可以都转为最常见的aac。 
ffmpeg -i test.mp4 -acodec aac -vn output.aac

4)提取视频

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

5)视频裁剪

从时间为00:00:15开始,截取5秒钟的视频。-ss表示开始切割的时间,-t表示要切多少。

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 

6)控制码率

码率又叫比特率, 定义为:单位时间播放连续的媒体(压缩后的音频或者视频)的比特数量。比特率越高,贷款小号的越多。

比特bit就是二进制里面最小的单位,为0或1,看下面公式:

                                  文件大小(B)=码率(b/s)*时长(s)
-minrate -b:v -maxrate 


解释:
-b:v主要是控制平均码率。
比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。
ffmpeg -i input.mp4 -b:v 2000k output.mp4 
把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。
ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize 
-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。


最终:
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4 
-minrate -maxrate解释:
在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

7)视频编码格式转换

比如一个视频的编码是MPEG4,想用H264编码:
ffmpeg -i input.mp4 -vcodec h264 output.mp4 
相反也一样 
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

8)只提取视频ES数据

ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

9)将输入的1920x1080缩小到960x540输出:

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4 
//ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

10)截取视频图像

ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg 
-r 表示每一秒几帧 
-q:v表示存储jpeg的图像质量,一般2是高质量。 
如此,ffmpeg会把input.mp4,每隔一秒,存一张图片下来。假设有60s,那会有60张。


可以设置开始的时间,和你想要截取的时间。 
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg 
-ss 表示开始时间 
-t 表示共要多少时间。 
如此,ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧。

11)序列帧与视频的相互转换

把darkdoor.[001-100].jpg序列帧和001.mp3音频文件利用mpeg4编码方式合成视频文件darkdoor.avi:
$ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024x768 -author fy -vcodec mpeg4 darkdoor.avi

还可以把视频文件导出成jpg序列帧:
$ ffmpeg -i bc-cinematic-en.avi example.%d.jp

2.音频

1)音量调节

"-y -i " + input.mp3+" -af volume=-10dB "+ outpath.mp3;
"ffmpeg"+" -i " + input.aac + " -vol " + 300 +" -acodec "+"copy "+ utput.aac;

2)音频拼接

"-y -i " + "concat:"+ inputone.mp3+"|"+ inputtwo.mp3+" -acodec copy "+outpath.mp3;

3)音频截取

"-y -i " +  input.mp3+" -ss 00:00:00 -t 00:00:05 "+outpath.mp3;

4)音频合成

"-y -i " + inputone.mp3 + " -i " + inputtwo.mp3 + 
" -filter_complexamix=inputs=2:duration=first:dropout_transition=4 "+ outpath.mp3;

猜你喜欢

转载自blog.csdn.net/qq_37321098/article/details/85064598