macOS系统Bash环境下使用FFmpeg批量转换MP4为AMV的问题(含画面拉伸修复需求)
macOS系统Bash环境下使用FFmpeg批量转换MP4为AMV的问题(含画面拉伸修复需求)
嗨,我来帮你搞定这两个问题——画面拉伸修复和批量转换,都是针对macOS的Bash环境来操作:
一、修复画面拉伸问题
你之前的命令用了scale=w=208:h=176,这是强制把所有视频拉伸到固定分辨率,自然会破坏原有的宽高比。要保持画面比例同时适配AMV的208×176标准,推荐两种滤镜组合方案:
方案1:保留完整画面,用黑边填充(推荐)
先把视频按原比例缩放到不超过208×176的最大尺寸,再用黑边补满到目标分辨率,不会裁切画面。修改后的滤镜参数如下:
-vf "scale=w='min(208,iw*176/ih)':h='min(176,ih*208/iw)',pad=208:176:(208-iw)/2:(176-ih)/2"
简单解释:
scale部分:计算出符合原比例的最大尺寸,确保宽不超208、高不超176pad部分:把缩放后的画面居中,用黑边补满到208×176的标准分辨率
方案2:裁切画面适配分辨率(无黑边)
如果不想留黑边,可以直接裁切原视频的部分区域来匹配208×176的比例,滤镜参数改成:
-vf "crop=ih*208/176:ih,scale=208:176"
(注:这个是假设原视频高度不变、裁切宽度;如果原视频比例更窄,可调整为crop=iw:iw*176/208,scale=208:176,裁切高度)
二、批量转换所有MP4为同名AMV
在Bash里用for循环就能轻松实现批量处理,把上面修复拉伸的滤镜整合进去,命令如下:
for file in *.mp4; do ffmpeg -i "$file" -ac 1 -ar 22050 -r 10 -block_size 2205 \ -vf "scale=w='min(208,iw*176/ih)':h='min(176,ih*208/iw)',pad=208:176:(208-iw)/2:(176-ih)/2" \ "${file%.mp4}.amv" done
关键细节说明:
for file in *.mp4:遍历当前目录下所有.mp4文件"$file":处理带空格的文件名必须加引号,避免命令出错"${file%.mp4}.amv":把原文件名的.mp4后缀替换成.amv,生成同名的AMV文件
你可以根据自己的需求选择对应的滤镜方案,替换到批量命令里即可!
备注:内容来源于stack exchange,提问作者nobody
相关产品推荐
相关产品推荐

