问题描述
目前我正在使用这个...
ffmpeg -video_size 1920x1080 -framerate 1 -f x11grab -i :0.0+0,0 -f pulse -ac 2 -i default -t 00:00:10 Output.mkv
当 ffmpeg 正在录制视频时,与上面的 ffmpeg 命令相比,我希望它能够显着降低大小和质量。
如果您感到好奇,我正在录制简短的质量保证视频,以确保我用 Python 编写的一个简单的小型网络抓取工具正确抓取数据(具体而言,它在特定时间点击特定按钮特定网页)。我的 Python 脚本触发了上面的命令,在我的 Python 脚本应该点击该按钮之前几秒钟开始录制我的屏幕。
当然,要验证网页上的按钮是否被点击,低质量的视频分辨率通常就足够了。
解决方法
对于 libx264/libx265,减少大小和质量的最重要选项是 -crf
。此选项控制质量。值 51 提供最差的质量。如果它太可怕了,那就用一个较小的数字。
ffmpeg -video_size 1920x1080 -framerate 1 -f x11grab -i :0.0+0,0 -f pulse -channels 2 -i default -t 00:00:10 -c:v libx264 -crf 51 -c:a libopus Output.mkv
,
为了显着降低 Output.mkv 的大小和质量,您可以使用下一个 ffmpeg 配置:
裁剪:iw-(以像素为单位的切割宽度):ih-(以像素为单位的切割高度)
scale:设置比例和分辨率(例如 1700x800)
crf:设置质量,其中 0 是无损,23 是默认值,51 是最差的。较低的值表示较高的质量,主观上合理的范围是 18-28。将 18 视为视觉无损
比特率值:-b:v value -minrate value 和 -maxrate max value(例如 - b:v 4000K -minrate 2000K -maxrate 6000K)
预设:理论上慢是最好的质量/尺寸,你可以超快探测 超快 非常快 快点 快速地 中 – 默认预设 慢 慢点 很慢
剪下一部分视频,改分辨率,改crf,和码率,先只做视频,然后其他工作可以加音频,不要混,重复,很重要,音视频分开编解码,然后你可以混合所有,但首先是这个例子中的视频
ffmpeg -i Output.mkv -map 0:v -vf crop=iw-150:ih-85,scale=ih*16/9:ih,scale=1072:732,setsar=1 -c:v libx264 -crf 17 -b:v 4000K -maxrate 6000K -bufsize 4M -movflags -faststart -preset veryfast -dn video-new.mkv