FFMPEG命令行处理视频进阶——高阶必读

FFMPEG拥有强大的视频处理能力,可惜的是有很多人不知道如何使用。本文深入介绍如何用编译好ffmpeg.exe程序处理视频,既有常用的简单的处理,也有一些比较少见的高大上的处理,一定能让你受益匪浅。ffmpeg是一把宝刀,在视频处理上,基本是一刀在手,天下我有。

首先下载编译好的ffmpeg程序,可以去下面的网址,https://ffmpeg.zeranoe.com/builds/#  点击"Donload Build"按钮下载最新编译的版本,解压后可以看到ffmpeg.exe文件用于处理视频,ffplay.exe文件用于播放视频。也可以去ffmpeg的官网http://ffmpeg.org/   下载源码自己编译(这个工作量比较大)。

打开命令行窗口,使用cd命令行进入到ffmpeg所在的目录,接下来就可以直接输入处理命令了。下面就来介绍各种各样的命令。下面命令行中的输入视频和输出视频的路径必须正确,如果路径不存在会出错的哦。

1、知道了视频流地址如何保存出本地文件:

ffmpeg -i rtmp://122.202.129.136:1935/live/ch4 -map 0 d:\work\yyy.mp4

2、知道了流地址,播放视频文件:

ffplay -rtsp_transport tcp rtsp://192.168.201.133:554/stream1.sdp

3、提取视频中的音频文件:

ffmpeg -i h:\work\yyy.avi -map 0:a d:\work\yyy.mp3

ffmpeg -i rtmp://122.202.129.136:1935/live/ch4 -map 0:a d:\work\yyy.mp3

4、提起多媒体中的视频(不要音频)

ffmpeg -i rtmp://122.202.129.136:1935/live/ch4 -map 0:v d:\work\yyy.mp4

5、把音频的左右声道分别保存为两个文件:

ffmpeg -i d:\work\yyy.mp3 -map_channel 0.0.0 d:\work\ch1.mp3 -map_channel 0.0.1 d:\work\ch2.mp3

6、把视频的音视频同时分为两个文件保存:

ffmpeg -i h:\work\video.mp4 -map 0:v  d:\work\video2.mp4 -map 0:a d:\work\video.mp3

7、把单纯的视频和单纯的音频合并为一个视频文件:

ffmpeg -i d:\work\out.mp4  -i d:\work\video.amr  -map 0:v  -map 1:a d:\work\strange.mp4

8、在视频的屏幕左上角加一个logo标志:

ffmpeg -i h:\work\video.mp4 -i h:\work\psu.png -filter_complex 'overlay' d:\work\video.mp4

9、输出视频的yuv数据:

ffmpeg -i d:\work\video.mp4 d:\work\hugefile.yuv

10、把视频的图像批量输出((-r 1)一秒钟保存一张,缩放为640*480,名称为foo-001.jpeg, foo-002.jpeg......)

ffmpeg -i h:\work\video.mp4 -r 1 -s 640x480 -f image2 d:\work\foo-%03d.jpeg

还可以添加更多参数

ffmpeg -i h:\work\video.mp4 -r 1 -ss 50 -vframes 3 -s 640x480 -f image2 d:\work\foo-%03d.jpeg

11、把一堆图像合成为一个视频:

ffmpeg -f image2 -framerate 25 -i d:\work\foo-%03d.jpeg   -s 1280x720  h:\work\foo.avi

12、转换视频的分辨率:

ffmpeg -i D:\work\hisense1.mp4 -vcodec libx264  -s 640x480  -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k D:\work\outputfile.mp4

13、直接将视频变为原来大小的一半:

ffmpeg -i D:\work\yyy2642.mp4  -vf scale=iw/2:ih/2 D:\work\yyy2642sm.mp4

14、裁剪视频中间的一段视频为一个单独视频:

ffmpeg -ss 00:00:30 -vsync 0 -t 00:00:30 -i D:\work\yyy2642.mp4 -vcodec libx264-acodec libfaac D:\work\outputfile.mp4

15、裁剪出视频屏幕正中间的一部分,宽度和高度都是原来视频的一半:

ffmpeg -i D:\work\yyy2642.mp4 -vf crop=iw/2:ih/2 D:\work\yyy2642sm.mp4

16、裁剪出视频屏幕任意一部分(注意参数):

ffmpeg -i D:\work\yyy2642.mp4  -vf crop=iw/3:ih/3:100:100 D:\work\yyy2642sm.mp4

17、播放时自动检测视频周围的黑框(播放时,输出窗口可以看到检测出的crop),这个其实不是视频处理,只是播放效果:

ffplay D:\work\yyy2642.mp4 -vf cropdetect

18、在视频的四周增加一圈30个像素的粉红色边框:

ffmpeg -i D:\work\yyy2642sm.mp4 -vf pad=iw+60:ih+60:30:30:pink D:\work\pink.mp4

19、视频水平翻转:

ffmpeg -i D:\work\yyy2642.mp4  -vf hflip D:\work\outputfile.mp4

20、视频上下翻转:

ffmpeg -i D:\work\yyy2642.mp4  -vf vflip D:\work\outputfile.mp4

21、视频旋转:

ffmpeg -i D:\work\yyy2642.mp4  -vf transpose=2 D:\work\outputfile.mp4

22、视频模糊处理(注意参数),可以让视频变模糊

ffmpeg -i D:\work\yyy2642.mp4  -vf  boxblur=1:10:4:10  D:\work\outputfile.mp4

23、视频锐化处理,一定程度可以让视频变清晰

ffmpeg -i D:\work\yyy2642.mp4  -vf unsharp=5:5:1.0:5:5:0.0 D:\work\outputfile.mp4

24、删除标志logo:

ffmpeg -i D:\work\outputfile.mp4 -vf delogo=10:10:256:256:0:0 D:\work\outputfile1.mp4

25、添加文字到视频上

ffmpeg  -i D:\work\yyy2642.mp4 -vf drawtext="fontfile=arial.ttf:text='Happy Holidays':x=(w-tw)/2:y=(h-th)/2:fontcolor=green:fontsize=60" D:\work\outputfile.mp4

其中arial.ttf是从windows\fonts目录下拷贝过来的字体文件

26、添加上方的字符滚动显示(显示中文字符):

ffmpeg -i D:\work\yyy2642.mp4  -vf drawtext="fontfile=ARIALUNI.ttf:text='程序明_Welcom':x=w-mod(t*50\,w):fontcolor=darkorange:fontsize=30" D:\work\outputfile.mp4

添加的文字显示在下方:
ffmpeg -i D:\work\yyy2642.mp4 -vf drawtext="fontfile=ARIALUNI.ttf:text=' 程序明':x=w-mod(t*50\,w):y=h-th:fontcolor=darkorange:fontsize=30"

27、视频右上角显示当前系统时间:

ffmpeg -i D:\work\yyy2642.mp4  -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='%{localtime\:%H\\\:%M\\\:%S}'" D:\work\outputfile.mp4

28、视频播放时晃动:

ffplay  -i D:\work\yyy2642.mp4  -vf crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2+((in_h-out_h)/2)*sin(n/7)

29、播放时视频色彩不断变换:

ffplay -i D:\work\yyy2642.mp4 -vf hue="H=2*PI*t:s=sin(2*PI*t)+1"

30、彩色视频转变为黑白视频:

ffmpeg -i D:\work\yyy2642.mp4 -vf lutyuv="u=128:v=128" D:\work\outputfile.mp4

31、视频转码为原来的播放速度的两倍:

ffmpeg -i D:\work\yyy2642.mp4 -vf setpts=PTS/2 -af atempo=2 D:\work\outputfile.mp4

32、视频转为gif(参数指定了位置):

ffmpeg -i D:\work\yyy2642.mp4 -ss 50 -t 10 -pix_fmt rgb24  -s 640x480 D:\work\jidu.gif

33、从视频里面截取几张图到一张图里(大图是2行3列):

ffmpeg  -i D:\work\yyy2642.mp4  -frames 1  -vf "select=not(mod(n\,300)),scale=320:240,tile=2x3" D:\work\out.png

34、两个文件左右合并(无敌了):

ffmpeg.exe -i "D:\work\yyy264.mp4" -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; movie=\'D:\\work\\yyy2642.mp4\', scale=iw/2:ih/2 [right];[left][right] overlay=main_w/2:0 [out]" -b:v 768k D:\work\output.mp4

35、两个文件上下合并(无敌了):

ffmpeg.exe -i "D:\work\yyy264.mp4" -vf "[in] scale=iw/2:ih/2, pad=iw:2*ih [top]; movie=\'D:\\work\\yyy2642.mp4\', scale=iw/2:ih/2 [bottom];[top][bottom] overlay=0:main_h/2 [out]" -b:v 768k D:\work\output.mp4

36、文件重叠合并,把第二个文件的视频缩小为四分之一后,放到第一个视频的宽高八分之一画面处(更无敌):

ffmpeg.exe -i "D:\work\yyy264.mp4" -vf "[in] scale=iw:ih, pad=iw:ih  [top]; movie=\'D:\\work\\yyy2642.mp4\', scale=iw/4:ih/4 [bottom];[top][bottom] overlay=main_w/8:main_h/8 [out]" -b:v 768k D:\work\output.mp4

37、普通的按顺序合并两个视频:

ffmpeg -i D:\work\yyy264.mp4 -qscale 0 D:\work\inputfile_01.mpg  

ffmpeg -i D:\work\yyy2642.mp4 -qscale 0  D:\work\inputfile_02.mpg

copy /b "D:\work\inputfile_01.mpg"+"D:\work\inputfile_02.mpg" "D:\work\inputfile_all.mpg"

ffmpeg -i D:\work\inputfile_all.mpg -qscale 0 D:\work\outputfile.mp4

38、音频的分割合并

把第一段音频分成两部分

ffmpeg.exe -ss 00:00:08.5 -vsync 0 -t 00:00:09 -i file1.mp3   file1end.mp3

ffmpeg.exe -ss 00:00:00 -vsync 0 -t 00:00:08 -i file1.mp3   file1New.mp3

把第一段音频的后半部分和第二段混音合并

ffmpeg -i file2.mp3 -i file1end.mp3   -filter_complex amix=inputs=2:duration=first:dropout_transition=0 file2forNew1.mp3

把第二段音频混音好的音频,分成前后两部分:

ffmpeg.exe -ss 00:00:00 -vsync 0 -t 00:00:04 -i file2forNew1.mp3   file2New.mp3

ffmpeg.exe -ss 00:00:04 -vsync 0 -t 00:00:05 -i file3.mp3   file2End.mp3

再把第二段的后半部分和第三段混音合并:

ffmpeg -i file3.mp3 -i file2End.mp3   -filter_complex amix=inputs=2:duration=first:dropout_transition=0 file3New.mp3

把新的三部分音频首尾连接连到一起:

ffmpeg -i file1New.mp3 -qscale 0 inputfile_01.mpg

ffmpeg -i file2New.mp3 -qscale 0  inputfile_02.mpg

copy /b "inputfile_01.mpg"+"inputfile_02.mpg" "inputfile_all.mpg"

ffmpeg -i file3New.mp3 -qscale 0  inputfile_05.mpg

copy /b "inputfile_all.mpg"+"inputfile_05.mpg" "inputfile_al2.mpg"

ffmpeg -i inputfile_al2.mpg -qscale 0 file5.mp4

ffmpeg -i file5.mp4 -map 0:a result.mp3

上面的所有命令都是笔者自己亲自测试使用的,其中有些命令行带有不少参数,参数需要根据实际情况修改,如果有命令不理解的欢迎提问。笔者尽量在百忙之中挤出时间答疑


你可能感兴趣的:(音视频开发)