视频裁剪

视频时长裁剪

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

results matching ""

    No results matching ""