下面来熟悉一下常用的对视频操作的几个命令。这次需要完成的命令也包括在其中。 视频的画面大小的剪切(crop filter) 将输入的视频的帧,以左上角为坐标的原点,剪切成x,y坐标开始的指定大小。 语法:
# []包裹的选项是可选的 crop= ow[:oh[:x[:y[:keep_aspect]]]] #example ffmpeg -i input -vf crop=iw/3:ih:0:0 output ffmpeg -i input -vf crop=iw/3:ih:iw/3:0 output ffmpeg -i input -vf crop=iw/3:ih:iw/3*2:0 output
简单的解释:
-
x,y :是偏移量。
-
ow,oh :是输出的宽和高。
-
iw ih :还可以使用来表示输入的宽和高
-
a: 表示比例 ,和 iw/ih 一样
如果想从中间开始剪切,命令就编程了
ffmpeg -i input_file -vf crop=w:h output_file
视频的Padding(应该是增加内边距)(pad filter)
给视频添加一个内边距。通常是视频需要在不同显示比例的画面中显示时,需要的命令。 语法:
#[]中的同样是可选的#坐标系与之前相同pad=width[:height[:x[:y[:color]]]] #example ffmpeg -i photo.jpg -vf pad=860:660:30:30:pink frame_photo.jpg
更常用的是将4:3的画面转换成16:9
# 如果不给color的话。默认将会是黑色的背景 # 将画面从4:3 切换成16:9 ffmpeg -i input -vf pad=ih*16/9:ih:(ow-iw)/2:0:color output # 16:9 转换成 4:3 ffmpeg -i input -vf pad=iw:iw*3/4:0:(oh-ih)/2:color output
其实标准的公式如下
# ar是画面的比例。如果是增加画面的宽度,则是 ffmpeg -i input -vf pad=ih*ar:ih:(ow-iw)/2:0:color output # 如果是增加画面的高度,则是 ffmpeg -i input -vf pad=iw:iw*ar:0:(oh-ih)/2:color output
★文末名片 可以免费领取下方音视频开发学习资料
翻转和旋转视频(flip filter)
对视频进行翻转和旋转 语法:
#水平翻转(Horizontal flip) -vf hfilp #竖直翻转(Vertical flip) -vf vfilp # 旋转 #0 - 逆时针旋转+竖直翻转 #1- 顺时针旋转 90 #2- 逆时针旋转 90 #3- 顺时针旋转90 + 竖直的翻转 transpose={0,1,2,3}
模糊、锐化和其他添加噪点的滤镜
模糊滤镜
boxblur
语法: # r=radius p=powerboxblur=luma_r:luma_p[:chroma_r:chroma_p[:alpha_r:alpha_p]] #example ffmpeg -i input.mpg -vf boxblur = 1.5:1 output.mp4
smartblur
#t = threashold smartblur = luma_r:luma_s:luma_t[:chroma_r:chroma_s:chroma_t] #example ffmpeg -i halftone.jpg -vf smartblur= 5:0.8:0 blurred_halftone.png
锐化
滤镜的名称竟然是 unsharp
语法:
l_msize_x:l_msize_y:l_amount:c_msize_x:c_msize_y:c_amount #all parameters are optional, if not set, the default is 5:5:1.0:5:5:0.0
默认的明亮度矩阵是5x5 而明亮度(luma)的效果强度是1.0.如果想创造高斯模糊的效果的话,可以使用一个负数的明亮度或者是浓度(chroma)
#高斯模糊的效果 ffmpeg -i input -vf unsharp= 6:6:-2 output.mp4
下面4张图是NASA的拍摄的图片。
-
是原图。
-
-vf unsharp
-
-vf unsharp=6:6:3
-
-vf unsharp = 6:6:-2
有部分降噪的fliter暂且略过
覆盖(Overlay)
可以实现画中画的功能。这里只是简单的覆盖的实例,更加复杂的例子需要在后面的进阶单元里看到。 语法:
overlay[=x:y[[:rgb={0,1}]] # x,y是可选的。默认参数是0 # rgb 也是可选的。它的值是 0或者1
命令行的构成
ffmpeg -i input1 -i input2 -filter_complex overlay=x:y output
这里需要注意是的 filter_complex 来替代-vf,因为有两个输入源。但是如果使用flitergraph和 link labels.这样我们就可以使用 movie 视频源,囊括第二输入和使用-vf
# 使用 movie 和 -vf ffmpeg -i input1 -vf movie=input2[logo];[in][logo] overlay=x:y output#Logo in top-left corner ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay pair1.mp4
# Logo in top-right corner #W 表示输入的视频的width w表示图片的宽度 ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w pair2.mp4
#Logo in bottom-right corner ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w:H-h pair3.mp4
添加文字到视频上
video filter:drawtext 语法:
drawtext=fontfile = font_f:text=text1[:p3=v3[:p3=v4[...]]] #最简单的example就是。 此时需要注意的是,这个字体文件必须在当前目录下 ffmpeg -i input -vf drawtext=fontfile=arial.ttf:text=Welcome output
混音
amerge
ffmpeg -y -i video_bgm.mp4 -i src2.aac -filter_complex [0:a][1:a]amerge=inputs=2[a] -map 0:v -map [a] -c:v copy -c:a aac -ac 2 -shortest after_compose3.mp4
amix
ffmpeg -i test.aac -i test.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 mix.aac
参数
-shortest 取最短的时长
-shortest : duration = MIN(inputs)
实例:
ffmpeg -i test.mp4 -i test.mp3 -vcodec copy -acodec aac -map 0:v:0 -map 1:a:0 -shortest mix_test.mp4
调节音量(整体调节)
ffmpeg -i test.mp4 -i test.mp3 -vcodec copy -acodec aac -map 0:v:0 -map 1:a:0 -vol 60 mix_test.mp4
设置时长(amix )
amix : setup duration
ffmpeg -i test.mp4 -i test.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=first[aout]" -map "[aout]" -c:v copy -map 0:v:0 mix_amerge.mp4
调节音量(amix)
ffmpeg -i test.mp4 -i test.mp3 -filter_complex "[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.9[a0]; [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a1]; [a0][a1]amix=inputs=2:duration=first[aout]" -map "[aout]" -ac 2 -c:v copy -map 0:v:0 mix_amerge.mp4
作者:deep_sadness
★文末名片可以免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓