FFMPEG转MOV为MP4时自动升分辨率,如何保留原视频尺寸?
问题根因
转码时分辨率自动放大是因为FFmpeg检测到源MOV视频使用非正方形采样像素(SAR),默认会按照显示宽高比(DAR)将输出MP4转换为正方形像素对应的分辨率,导致分辨率被动放大。
修正后可直接使用的代码
find . -iname "*.mov" -print0 | while IFS= read -r -d '' file; do ffmpeg -i "$file" -c:v libx264 -crf 23 -vf "scale=iw:ih,setsar=1" -c:a aac "${file%.*}.mp4" -y rm "$file" done
核心调整说明
- 优化了文件遍历逻辑,
-iname参数不区分大小写匹配MOV后缀,同时兼容带空格、特殊字符的文件名,避免原遍历逻辑的潜在报错 - 新增的
-vf "scale=iw:ih,setsar=1"参数是分辨率不被修改的核心:scale=iw:ih强制输出视频宽高和输入视频完全一致setsar=1强制输出视频使用正方形像素,阻断FFmpeg自动拉伸分辨率的逻辑
- 如果你处理的视频存在宽高为奇数的情况,只需要把scale参数修改为
scale=trunc(iw/2)*2:trunc(ih/2)*2即可,仅对奇数像素做取整处理,不会改变原有视频的分辨率比例。
内容的提问来源于stack exchange,提问作者Peter Mark Friedladner
相关产品推荐
相关产品推荐

