JGY Front-end Dev Engineer
「创建博客」 「编辑」 「本文源码」

ffmpeg

2018-11-09
YJG

ffmpeg的一些命令

合并视频、音频合并

// 视频路径为手机目录,名称.mp4为ts格式转码后的格式
-i "concat:/视频路径/1.ts|/视频路径/2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc /输出视频路径/名称.mp4

视频添加GIF水印

// -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

-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

视频加黑边

-vf 'scale=1280:534,pad=1280:720:0:93:black'

提取音视频

-i input.mov -vcodec copy -an output.mp4
//-vcodec copy 复制视频编码
-an 禁止音频输出
`提取音频`
-i input.mov -write_xing 0 output.mp3
//-write_xing 0 #2697: MP3 output duration incorrect in OS X

视频高级截图

//每秒截图,大小为原视频的一半,输出一张 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

-f image2 -threads 2 -r 0.5 -i 输入路径/img_%03d.png 输出路径/名字.gif

视频 GIF 转换

//视频转 GIF:
-i input.mov -r 10 output.gif
//-r fps 帧率

//GIF 转视频:
-f gif -i input.gif output.mp4
//-f gif 强制输入文件识别为 GIF 格式

音频淡入/淡出

//时长为 20 秒的视频,前 3 秒淡入,最后 3 秒淡出:
-i input.mov -af afade=t=in:st=0:d=3,afade=t=out:st=13:d=3 output.mp4

加速/减速视频

-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 格式

-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

视频剪切

//裁剪前 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个视频四画面显示

-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

视频水面倒影

-i输入地址/xxx.mp4 -vf"split[a][b];[a]pad=iw:ih*2[a];[b]vflip[b];
[a][b]overlay=0:h" /输出目录/dy.mp4 

左右镜像

-i input.mkv -filter_complex "[0:v]pad=w=2*iw[main];[0:v]hflip[overlay];[main][overlay]overlay=x=w" symmetry.mkv

图片左右合并

-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:

-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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏博主

下一篇 电器维修

发布评论

Content