--- layout: post title: "ffmpeg" categories: 彷徨 tags: 日记 ffmpeg author: YJG --- * content {:toc} # ffmpeg的一些命令 `合并视频、音频合并` ```javascript // 视频路径为手机目录,名称.mp4为ts格式转码后的格式 -i "concat:/视频路径/1.ts|/视频路径/2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc /输出视频路径/名称.mp4 ``` `视频添加GIF水印` ```javascript // -t为时间视频大于图片手机按视频时间停止,反之就会无线循环下去所以加个-t参数 -y -i 视频路径/名称.mp4 -t 13 -ignore_loop 0 -i GIF图片路径/名称.gif -filter_complex overlay=0:H-h 输出路径/名称.mp4 要贴到其他地方?看下面: 右上角: -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4 左下角: -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4 右下角: -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4 ``` `每隔10秒交替出现logo` ```javascript -y -t 60 -i jidu.mp4 -i logo.png -i logo2.png -filter_complex "overlay=x=if(lt(mod(t\,20)\,10)\,10\,NAN ):y=10,overlay=x=if(gt(mod(t\,20)\,10)\,W-w-10\,NAN ) :y=10" overlay.mp4 ``` `视频加黑边` ```javascript -vf 'scale=1280:534,pad=1280:720:0:93:black' ``` `提取音视频` ```javascript -i input.mov -vcodec copy -an output.mp4 //-vcodec copy 复制视频编码 -an 禁止音频输出 ``` ```javascript `提取音频` -i input.mov -write_xing 0 output.mp3 //-write_xing 0 #2697: MP3 output duration incorrect in OS X ``` `视频高级截图` ```javascript //每秒截图,大小为原视频的一半,输出一张 10x3 的网格图: -y -i input.mp4 -vf "fps=1,scale=iw/2:-1,tile=10x3" -an output.jpg //每秒输出一张图:fps参数可改 -i input.mov -vf fps=1 -q:v 2 output%03d.png ``` `系列图转GIF` ```javascript -f image2 -threads 2 -r 0.5 -i 输入路径/img_%03d.png 输出路径/名字.gif ``` `视频 GIF 转换` ```javascript //视频转 GIF: -i input.mov -r 10 output.gif //-r fps 帧率 //GIF 转视频: -f gif -i input.gif output.mp4 //-f gif 强制输入文件识别为 GIF 格式 ``` `音频淡入/淡出` ```javascript //时长为 20 秒的视频,前 3 秒淡入,最后 3 秒淡出: -i input.mov -af afade=t=in:st=0:d=3,afade=t=out:st=13:d=3 output.mp4 ``` `加速/减速视频` ```javascript -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" output.mp4 //setpts=0.5*PTS 中的 0.5 是视频速度放慢一半 atempo=2 中的 2 是相对应的音频速度(=1/视频速度) ``` ## 转换格式 `转换为 MP4 格式` ```javascript -i input.mov output.mp4 //-i 输入文件 //指定规格参数 -i input.mp4 -c:v libx264 -preset slow -crf 18 -c:a aac -b:a 128k -pix_fmt yuv420p output.mp4 ``` `视频剪切` ```javascript //裁剪前 10 秒: ffmpeg -ss 0:0 -t 0:10 -i input.mov output.mp4 //-ss 开始时间 -t 持续时间 `裁剪最后 10 秒` -sseof -0:10 -i input.mov output.mp4 //-sseof 相对于文件末尾的开始时间 `裁剪尺寸` //将原视频缩小一半,并裁剪画面正中的正方形区域: -i input.mov -vf scale=iw/2:-1,crop=ih output.mp4 //scale=width:height iw/ih 表示输入宽度/高度 -1 表示按输入尺寸等比自动计算 crop=width:height:x:y x:y 指定裁剪的左上角位置,默认值为 (in_w-out_w)/2 和 (in_h-out_h)/2,即输出视频为原视频的中央区域 ``` `4个视频四画面显示` ```javascript -i 输入路径/名字.mp4 -i 输入路径/名字.ts -i 输入路径/名字.ts -i 输入路径/名字.mp4 -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v libx264 输出路径/名字.mkv ``` `视频水面倒影` ```javascript -i输入地址/xxx.mp4 -vf"split[a][b];[a]pad=iw:ih*2[a];[b]vflip[b]; [a][b]overlay=0:h" /输出目录/dy.mp4 ``` `左右镜像` ```javascript -i input.mkv -filter_complex "[0:v]pad=w=2*iw[main];[0:v]hflip[overlay];[main][overlay]overlay=x=w" symmetry.mkv ``` `图片左右合并` ```javascript -i cat.jpg -i bee.jpg -filter_complex '[0:v]scale=100:100, pad=2*iw:ih:0:0:blue[a]; [1:v]scale=100:100[b]; [a][b]overlay=102:0' -y 2.jpg ``` `一个大视频叠加上一个小视频就是Picture In Picture:` ```javascript -i 0Cannon.f4v -i slamtv60.264 -i slamtv60.264 -filter_complex '[1:v]scale=100:100[b]; [0:v][b]overlay=80:80' -y xx.mp4 // 两条没经过实验 ffmpeg -i master_video.mp4 -vf "movie=smaller_inner_video.mp4, fade=out:300:30:alpha=1 [inner]; [in][inner] overlay=70:70 [out]" completed.mp4 ```