视频裁剪
视频时长裁剪
ffmpeg -ss 0 -i video.mp4 -to 00:04:09 -c copy output.mp4
去掉原视频背景音乐
ffmpeg -i lbj.mp4 -c:v copy -an novoice.mp4
添加新的背景音乐
ffmpeg -i novoice.mp4 -i 1.mp3 -t 19 -c copy voice.mp4
以自定义中心为基准裁剪
ffmpeg -y -i copy.mp4 -vf crop=iw:ih/2:0:100 output.mp4
以视频中心为基准裁剪
ffmpeg -y -i copy.mp4 -vf crop=iw:ih/2 output.mp4
给视频加边框
ffmpeg -y -i copy.mp4 -vf pad=iw+60:ih+60:30:30:pink output.mp4
水平翻转
ffmpeg -y -i copy.mp4 -vf hflip output.mp4
垂直翻转
ffmpeg -y -i copy.mp4 -vf vflip output.mp4
模糊处理
ffmpeg -y -i copy.mp4 -vf boxblur=1:10:4:10 output.mp4
锐化处理
ffmpeg -y -i copy.mp4 -vf unsharp sharp.mp4
去水印
ffmpeg -y -i camera.mp4 -vf '[in]delogo=x=400:y=920:w=150:h=100,delogo=x=10:y=10:w=170:h=100[out]' delogo.mp4
视频覆盖(画中画)
ffmpeg -i copy.mp4 -itsoffset 5 -i logo.mp4 -filter_complex overlay=0:0 overlay.mp4
// 视频特定位置添加水印
ffmpeg -i HC.mp4 -vf "movie=0.jpg [watermark]; [in][watermark] overlay=100:100 [out]" overlay.mp4
// colorchannelmixer:修改画中画透明度
ffmpeg -y -i HC.mp4 -vf "movie=wolf.png,colorchannelmixer=aa=0.5 [wm]; [in][wm]overlay=30:10[out]" output.mp4
ffmpeg -i origin.mp4 -i mask.mp4 -filter_complex "[1:v]format=yuva444p,scale=1108x1920,rotate=PI/4,colorchannelmixer=aa=0.5[valpha];[0:v][valpha]overlay=shortest=1:x=-500:y=-500" -y overlay.mp4
添加单行文字
ffmpeg -y -i yellow.mp4 -vf drawtext="fontfile=gb.ttf:text='慢下来,在微观世界里看诗和远方':x=(w-tw)/2:y=80:fontcolor=green:fontsize=30" text.mp4
ffmpeg -y -i yellow.mp4 -vf drawtext="fontfile=gb.ttf:text='一个相机分隔出两个世界,门外是繁华的现代都市,门里是幽静如画的『世外桃源』':x=(w-tw)/2:y=h-100:fontcolor=green:fontsize=30" text.mp4
添加多行文字
ffmpeg -y -i yellow.mp4 -vf [in]drawtext="fontfile=gb.ttf:text='慢下来,在微观世界里看诗和远方':x=(w-tw)/2:y=80:fontcolor=red:fontsize=30",drawtext="fontfile=gb.ttf:text='一个相机分隔出两个世界,':x=(w-tw)/2:y=h-150:fontcolor=green:fontsize=30",drawtext="fontfile=gb.ttf:text='门外是繁华的现代都市,':x=(w-tw)/2:y=h-100:fontcolor=green:fontsize=30",drawtext="fontfile=gb.ttf:text='门里是幽静如画的『世外桃源』':x=(w-tw)/2:y=h-50:fontcolor=green:fontsize=30"[out] text.mp4
text1 = 'drawtext="fontfile=gb.ttf:text=慢下来,在微观世界里看诗和远方:x=(w-tw)/2:y=h-150:fontcolor=red:fontsize=30"'
text2 = 'drawtext="fontfile=gb.ttf:text=一个相机分隔出两个世界:x=(w-tw)/2:y=30:fontcolor=green:fontsize=30"'
text3 = 'drawtext="fontfile=gb.ttf:text=门外是繁华的现代都市:x=(w-tw)/2:y=80:fontcolor=green:fontsize=30"'
text4 = 'drawtext="fontfile=gb.ttf:text=门里是幽静如画的世外桃源:x=(w-tw)/2:y=130:fontcolor=green:fontsize=30"'
cmdStr = f'ffmpeg -y -i pad.mp4 -vf [in]{ text1 },{ text2 },{ text3 },{ text4 }[out] text.mp4'
os.popen(cmdStr)
加速视频和音频
// 加速视频(会丢帧)
ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv
// 四倍音频
ffmpeg -i input.mkv -filter:a "atempo=2.0,atempo=2.0" -vn output.mkv
// 同时加速视频和音频
ffmpeg -i HC.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
eq: 调整视频亮度/对比度/饱和度
ffmpeg -i HC.mp4 -vf eq=contrast=1:brightness=0:saturation=3 output.mp4
// ontrast
设置contrast表达式,值必须是一个-2.0-2.0间的浮点数,默认为0
// brightness
设置brightness表达式.值必须是一个-1.0-1.0间的浮点数,默认为0
// saturation
设置saturation表达式. 值必须是一个0-3.0间的浮点数,默认为1
hue: 调整视频色调、饱和度、亮度
ffmpeg -y -i HC.mp4 -vf hue=b=1:s=5:h=180 output.mp4
// h:色调角度度数(0到360),默认值为0
// s:饱和度(-10到10),默认值为1
// b:亮度(-10到10),默认值为0
colorbalance: 颜色平衡,调整RGB值的权重
ffmpeg -y -i HC.mp4 -vf colorbalance=rh=0:rs=0:rm=0 output.mp4
// rs、gs、bs:调整红色,绿色和蓝色阴影(最暗的像素)(范围:-1到1)
// rm、gm、bm:调整红色,绿色和蓝色中间色(中等像素)(范围:-1到1)
// rh、gh、bh:调整红色,绿色和蓝色的亮点(最亮的像素)(范围:-1到1)
抽取制定时间的帧
ffmpeg -ss 00:00:30 -i 666051400.mp4 -vframes 1 0.jpg
画网格
ffmpeg -i HC.mp4 -vf drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5 output.mp4
滤镜混合使用
ffmpeg -y -i HC.mp4 -filter:v "setpts=1.01*PTS" -filter:a "atempo=0.99" -vf "movie=timer.mp4,format=yuva444p,scale=213:120,rotate=PI/6,colorchannelmixer=aa=0.1 [wm]; [in][wm]overlay=shortest=1:x=(W-w)/2:y=(H-h)/2,hflip,eq=contrast=1:brightness=0:saturation=3,unsharp,vignette=PI/4" -shortest output.mp4
// c=none去旋转黑色背景
ffmpeg -y -re -i origin.mp4 -re -i timer.mp4 -re -i timer.mp4 -re -i timer.mp4 -re -i timer.mp4 -re -i mask.mp4 -filter_complex "[0:v] format=rgb24,setpts=PTS-STARTPTS,scale=664x1180 [base];[1:v] format=yuva444p,colorchannelmixer=aa=0.02,setpts=PTS-STARTPTS,scale=332x590,rotate=PI/4:c=none [upperleft]; [2:v] format=yuva444p,colorchannelmixer=aa=0.02,setpts=PTS-STARTPTS,scale=332x590,rotate=PI/3:c=none [upperright]; [3:v] format=yuva444p,colorchannelmixer=aa=0.02,setpts=PTS-STARTPTS,scale=332x590,rotate=PI/6:c=none [lowerleft]; [4:v] format=yuva444p,colorchannelmixer=aa=0.02,setpts=PTS-STARTPTS,scale=332x590 [lowerright]; [5:v] format=yuva444p,colorchannelmixer=aa=0.1,setpts=PTS-STARTPTS,scale=664x1180,rotate=PI/4:c=none [mask]; [base][upperleft] overlay=shortest=1[tmp1];[tmp1][upperright] overlay=shortest=1:x=332 [tmp2]; [tmp2][lowerleft]overlay=shortest=1:y=590 [tmp3]; [tmp3][lowerright]overlay=shortest=1:x=332:y=590 [tmp4]; [tmp4][mask]overlay=shortest=1:x=0:y=0" -c:v libx264 output2.mp4
获取视频时长
ffmpeg -i HC.mp4 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//
多视频同屏展示
ffmpeg -y -re -i HC.mp4 -re -i HC.mp4 -re -i HC.mp4 -re -i HC.mp4 -filter_complex "nullsrc=size=664x1180 [base];[0:v] setpts=PTS-STARTPTS,scale=332x590 [upperleft]; [1:v] setpts=PTS-STARTPTS,scale=332x590 [upperright]; [2:v] setpts=PTS-STARTPTS,scale=332x590 [lowerleft];[3:v] setpts=PTS-STARTPTS,scale=332x590 [lowerright]; [base][upperleft] overlay=shortest=1[tmp1];[tmp1][upperright] overlay=shortest=1:x=332 [tmp2]; [tmp2][lowerleft]overlay=shortest=1:y=590 [tmp3];[tmp3][lowerright] overlay=shortest=1:x=332:y=590" -c:v libx264 output1.mp4