前言
最近使用了ffmpeg这个工具来处理视频,这里记录一下ffmpeg的一些相关的操作。 注:平台在windows上。 相关资料可以查看ffmpeg的官方文档及wiki
场景
把视频转换成图片
ffmpeg -i file.mp4 -r 30 ./dir/%03d.jpg
上述命令,从file.mp4这个视频文件分离出图片,按每秒30个图片来。其中-i指定了input, -r指定了帧率,最后一个参数指定了输出格式,%03d指定了格式是三位数字,所以输出会是在dir文件夹里,从001.jpg开始的图片序列。
把图片转换成视频
ffmpeg -framerate 30 -i ./dir/%03d.jpg -r 30 file.mp4
上述命令是把视频转换成图片的反操作。这里要注意的是,-framerate及-r都是指帧率,但前者是input的,而后者是指定output的,还有-framerate要在-i前面,而-r在后面。
转换视频格式
ffmpeg -i input.avi -pix_fmt yuv420p output.mp4
上述命令把avi的视频格式转换成mp4的。这里面还有一个codec的问题,如果需要指定使用原来的codec,要使用
ffmpeg -i input.avi -vcodec copy -acodec copy output.mp4
其中-vcodec及-acodec分别视频及音频的codec。要特别注意的是,-pix_fmt yuv420p是必须的,在实践中,如果没有使用这个选项,生成的视频在win7上无法预览第一帧,而且生成的mp4在firefox中显示文件损坏(在chrome中没问题)。
改变视频帧率
ffmpeg -i input.mp4 -r 15 output.mp4
把原来的视频帧率改成15帧/秒。
改变视频画质
ffmpeg -i input.mp4 -crf 30 output.mp4
crf的相关知识可以查看 https://trac.ffmpeg.org/wiki/Encode/H.264 注意,crf的值越高,画质越低,视频的输出大小越小。使用时,可以取一个平衡点。
去除视频里的音频
ffmpeg -i input.mp4 -c copy -an output.mp4
其中,-an是去除音频的选项
改变视频分辨率
ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4
把视频高度改成720,宽度等比例缩放
总结
之前公司做过短暂的短视频app, 研究过快手的视频录制流程。基本上,快手可以在基本保证画质的情况下,把视频的大小压缩在1m以内(大部分是500kb以内)。这是很重要的一个功能。平常做前端开发,有时运营给了个画质不是很好的展示视频,但大小由几十M,这个时候,也可以使用ffmpeg极大地压缩大小,让页面加载更快。