–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
申明: 这是一个ffmpeg的代码保存集,以后用到的鬼畜操作都会更新至此。
-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
1、视频拆解成帧图
ffmpeg -i input.mp4 -r 25 output_folder/%05d.png -loglevel error
-i
:输入的视频,待拆解的视频;-r
:视频的帧率;output_folder
:帧图的存放地址;
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
2、插帧
从fps=25
的原视频插帧到fps=50
的新视频。
ffmpeg -i input.mp4 -filter:v "minterpolate='mi_mode=mci:mc_mode=aobmc:me_mode=bidir:mb_size=8:search_param=16:scd_threshold=5:vsbmc=1:fps=48'" -b:v 50M output.mp4
-i
:输入的视频,待插帧的视频;fps=
:后面指定的是输出的output.mp4
的帧率,一般是input.mp4
帧率的2倍;- 插帧model详解如下:
“mi_mode”运动插补模式。接受以下值:
'dup': 复制上一帧或下一帧以插入新帧。
'blend':混合源帧。插值帧是上一帧和下一帧的平均值。
'mci': 运动补偿插补。选择此模式时,以下选项有效:
“mc_mode”运动补偿模式。接受以下值:默认模式是“ obmc”。
‘obmc’: 重叠的块运动补偿。
‘aobmc’:自适应重叠块运动补偿。根据相邻运动矢量的可靠性来自适应地控制窗口加权系数,以减少过度平滑。
“me_mode”运动估计模式。接受以下值:默认模式为“ bilat”。
“bidir”: 双向运动估计。针对每个源帧在向前和向后两个方向上估计运动矢量。
“bilat”: 双边运动估计。直接为插值帧估计运动矢量。
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
3、多段视频合成一段视频
第一步:同级目录下新建input.txt
文件,input.txt
中的内容格式如下:引号内是待合成的视频名称,注意前后顺序;
file 'input-01.mp4'
file 'input-02.mp4'
file 'input-03.mp4'
第二步:
ffmpeg -f concat -i input.txt -c: copy output.mp4
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
4、升视频的色深比特率
注:将8bit视频的色深用抖动算法升为10bit视频,分两步操作。
第一步:
ffmpeg -i input.mp4 -b:v 50000k -c:v libx264 -color_range 1 -colorspace 1 -color_primaries 1 -color_trc 1 -pix_fmt yuv420p -profile:v main -level 5.1 -preset faster -q:v 0 -s 3840x2160 -y -an output-s1.mp4
-i
:输入的视频,待升bit的原视频;-s
:指定的输出视频的分辨率;
第二步:
ffmpeg -i output-s1.mp4 -b:v 50000k -vf "colorspace=bt709:space=bt2020ncl:trc=bt2020-10:primaries=bt2020:range=tv:format=yuv420p10:dither=fsb" -preset faster -q:v 0 -y -an output-s2.mp4
-i
:输入的视频,为第一步的输出视频;space=
:将输出视频的色域转换为bt2020
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
5、视频的HDR处理
ffmpeg -i output-s2.mp4 -b:v 50M -c:v libx265 -preset faster -x265-params "level=5.1:keyint=100:colorprim=bt2020:transfer=arib-std-b67:colormatrix=bt2020nc:master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,50):max-cll=0,0" -vf "pad=3840:2160:0:0:black" -an -y hdr.mp4
master-display
:这个参数比较复杂,在支持HDR的4K显示屏上可看出色彩更加饱和,参数是需要人为尝试,得到你觉得最理想的画质;pad=xxxx:xxx:x:x:black
:这是填补边界的参数,pad=3840:2160:0:0:black
意味着如果新视频的分辨率不足4K,则用black
色填补空缺的地方;hdr.mp4
:输出视频的格式可为mp4,mov,ts
等
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
6、视频提取声音
ffmpeg -i input.mp4 -vn -ar 44100 -ab 256k -f mp3 src.mp3
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
7、视频加声音
第一种:有mp3文件,可用第六步从视频中提取音频mp3文件。
ffmpeg -i hdr.mp4 -i src.mp3 -b:v 50000k -bf 1 -b_strategy 0 -ar 44100 -ab 256k -c:v libx265 -x265-params "level=5.1:frame-threads=8:keyint=100:colorprim=bt2020:transfer=arib-std-b67:colormatrix=bt2020nc:master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,50):max-cll=0,0" -preset faster -c:a copy -y final.mp4
第二种:有声音的视频1,加上一组序列帧,生成有声音的结果
ffmpeg -y -i input_1.mp4 -r 25 -i input_pic/%05d.png -map 0:a? -map 1:v -r 25 -c:v libx264 -b:v 8M -pix_fmt yuv420p -c:a aac -b:a 192k -ar 48000 -strict -2 result.mp4 -loglevel error
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
8、视频加字幕
ffmpeg -i input_video.mp4 -i input_pic.png -filter_complex "[1:v]scale=180:72 ,[0:v] overlay=20:30" output.mp4 -y
- 添加字幕——可以是图片也可以是视频,更换第二个
-i
后的输入即可; scale
是指视频或图片的尺寸大小—— width * height;overlay
是指视频或图片的摆放位置——x:y;[1:v]
是第二个-i
数据作为贴图, [0:v] 是第一个-i
数据作为贴图;
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
9、虚化视频边缘
ffmpeg -i input_video.mp4 -vf "split[a][b];[a]scale=720:1280,crop=x=40:y=320:w=512:h=640, boxblur=10:5[main];[main][b]overlay=(W-w)/2" output.mp4 -y
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------
10、添加转场
在视频1与视频2中间添加一段长达2s的转场
ffmpeg -i input_1.mp4 -i input_2.mp4 -filter_complex xfade=transition=fade:duration=2:offset=2 output.mp4 -y
transition
:后面有多种model可供选择,可在ffmpeg官网中查询到
–-----------------------------------------------------------------------------—--------------------------------------------
–-----------------------------------------------------------------------------—--------------------------------------------