解决Mac录屏生成的mov无法播放问题

升级到10.15后,的录屏功能就不好用了,尽管已经给它授权使用屏幕录制了。

最近都是使用自带的“截屏”,你可以在 “应用程序”–>“实用工具”里找到,访达完整路径是 “/System/Applications/Utilities/Screenshot.app”

第一反应是想通过ffmpeg转换mov,转换时出现此类提示

[libx264 @ 0x7f9eff817600] width not divisible by 2 (367x219)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

大致的意思是 导出的视频 宽度和高度都要是偶数。 ffmpeg在转码的时候已经告诉我们,视频的宽高是367x219。宽和高都不是偶数,需要手动调整下了

ffmpeg -i "/Users/hf/Desktop/1.mov" -s 368x220 "/Users/hf/Desktop/1.mp4"

通过表达式,让ffmpeg自动处理成偶数

f1="/Users/hf/Desktop/1.mov"
f2="/Users/hf/Desktop/1.mp4"
w="if(mod(iw,2),iw-1)"
h="if(mod(ih,2),ih-1)"
ffmpeg -y -i "${f1}" -vf "scale=${w}:${h}" "${f2}"

iw,源视频的宽度(input width),如果宽度不是偶数,则在宽度基础上减去1px ih,源视频的宽度(input height),如果高度不是偶数,则高度减1px

另外mov是苹果专用格式,还可能包含一些特殊属性,我们可以加一些mp4通用参数让mp4有更好的兼容性

f1="/Users/hf/Desktop/1.mov"
f2="/Users/hf/Desktop/1.mp4"
w="if(mod(iw,2),iw-1)"
h="if(mod(ih,2),ih-1)"
ffmpeg -y -i "${f1}" -pix_fmt yuv420p -vcodec libx264 -profile:v high -level:v 4.1 -vf "scale=${w}:${h}" "${f2}"

这样转好的mp4 就可以发给朋友或同事了。

经验分享 程序员 微信小程序 职场和发展