转自:https://www.liangzl.com/get-article-detail-8191.html
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