压缩视频
ffmpeg -i video.mp4 -b:v 1000k -s 1920x1080 video.small.mp4
修改码率比较直接,直接和文件大小成正比,1000k指的是码率1Mb/s,分辨率可以修改视频画幅大小
插入关键帧
ffmpeg -i video.mp4 -c:v libx264 -preset superfast -x264opts keyint=60 -acodec copy -f mp4 video.frame.mp4
有时候会出现视频seek不准的情况,拖动进度条无法准确定位,会往回弹,这种情况经常是因为缺少关键帧;
这个命令是每隔60帧插入一个关键帧
批量处理
find ./ -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -c:v libx264 -preset superfast -x264opts keyint=100 -acodec copy -f mp4 "${0%%.mp4}.small.mp4"' {} \;
可以用find来实现,"./"是包含子路径的,"*.mp4"是文件名,单引号内是具体的命令;
"${0%%.mp4}.small.mp4"是输出的文件名;
"${0%%.mp4}"这一段是Linux的字符串操作,这里是从第0个字符开始保留,删除".mp4",然后拼上".small.mp4";
可以指定路径比如"finish/${0%%.mp4}.small.mp4";
优化关键帧
插入关键帧会使文件大小激增,使用这个命令可以优化关键帧
ffmpeg -i 1.mp4 -keyint_min 60 -g 60 -sc_threshold 0 1.frame.mp4
-keyint_min为最小帧间隔;-sc_threshold这ffmpeg的自动优化选项,为了使码率均衡,设置0不启用
设置帧速率
-r 24
帧率设置为24
组合技
ffmpeg -i 1.mp4 -r 24 -b:v 500k -s 1280x720 -c:v libx264 -preset superfast -x264opts keyint=24 -acodec copy 1.frame.mp4
帧率24,500k码率,1280x720尺寸,每24帧插入一个关键帧
mov转MP4
find ./ -name '*.mov' -exec sh -c 'ffmpeg -i "$0" -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1280:-1" -acodec libmp3lame -ab 128k "${0%%.mov}.mp4"' {} \;
-crf 20是质量,scale=1280:-1是尺寸
网友评论