1. 几张图片合成gif
ffmpeg -r 1 -i ./video/shot-%d.jpg ./video/11.gif
2. 视频第二秒开始截取三秒转换gif
ffmpeg -t 3 -ss 00:00:02 -i small.mp4 small-clip.gif
3. 视频自动裁剪关键帧
什么是关键帧:
关键帧,是指动画中一个绘图,定义任何的起点和终点平滑过渡。一系列关键帧定义了观看者将看到的运动,而关键帧在电影,视频或动画上的位置定义了运动的时间。
详细解释: blog.csdn.net/justloveyou…
自动截取I帧:
ffmpeg -i assets/video2.mp4 -an -vf select='eq(pict_type\,I)' -vsync 2 -s 960x540 -f image2 assets/image-%03d.jpeg
各参数解释:
-i :输入文件,这里的话其实就是视频;
-vf:是一个命令行,表示过滤图形的描述。选择过滤器select会选择帧进行输出:pict_type和对应的类型:PICT_TYPE_I 表示是I帧,即关键帧;
-vsync 2:阻止每个关键帧产生多余的拷贝;
-f image2 name_%02d.jpeg:将视频帧写入到图片中,样式的格式一般是: “%d” 或者 “%0Nd”
-s:分辨率,544*960
这样保存下来的关键帧的命名顺序是从001开始的,数字表示第几个关键帧。
2.将图片序列合成视频
ffmpeg -f image2 -i image%d.jpg video.mpg
上面的命令会把当前目录下的图片(名字如:image1.jpg, image2.jpg, 等...)合并成video.mpg
3.将视频分解成图片序列
ffmpeg -i video.mpg image%d.jpg
上面的命令会生成image1.jpg, image2.jpg, ...
支持的图片格式有:PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI
4.从视频抽出声音,并存为Mp3
ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3
说明:
* 源视频:source_video.avi
* 音频位率:192kb/s
* 输出格式:mp3
* 生成的声音:sound.mp3
引用:
ffmpeg 提取关键帧blog.csdn.net/u011394059/…
ffmpeg 常用命令blog.sina.com.cn/s/blog_6495…
4. 有效压缩gif以减小大小
ffmpeg -i input.mp4 -filter_complex "[0:v]fps=10,scale=-1:90:flags=lanczos,split [a][b];[a] palettegen [p];[b][p] paletteuse" -y output.gif
function next(ctx) { ctx.body = { code: '200', data: 'ok', }; ffmpeg('123.mp4') .complexFilter(['[0:v]fps=10,scale=-1:300:flags=lanczos,split [a][b];[a] palettegen [p];[b][p] paletteuse']) .outputOptions(['-t 10', '-ss 00:00:02', '-r 8']) // .filterGraph('setpts=0.4*PTS') .on('start', (str) => { console.log('转换任务开始~', str); }) .on('progress', (progress) => { console.log(`进行中,完成${progress.frames}帧`); }) .on('end', (str) => { console.log('转换任务完成!', str); }) .save('./assets/small.gif');}
但是,我们发现创建的gif与使用次中音创建的gif在大小上存在巨大差异。
[原始MP4]-845KB
Tenor Nano gif - 42KB
ffmpeg gif - 106KB
我们甚至尝试更改抖动算法以进一步减小尺寸,但最终增加了噪声并损坏了gif品质。
paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle
我们也尝试过在Gifsicle中调整颜色量化,但这没有用
gifsicle --resize _x90 --colors 256 --color-method diversity --dither=ordered --resize-method sample input.gif > output.gif