我用来缩放然后裁剪的 FFMPEG 命令在我处理的 6 种情况中的 5 种情况下运行良好,但在一种情况下由于我不知道的原因,它根本不起作用。
输入 jpg 文件的尺寸 = 774x1032
- 输出 jpg 文件的尺寸 = 1000x1000 --> 确定
- 输出 jpg 文件的尺寸 = 400x200 --> 确定
- 输出 jpg 文件的尺寸 = 750x200 --> 确定
- 输出 jpg 文件的尺寸 = 350x200 --> 确定
- 输出 jpg 文件的尺寸 = 400x350 --> 确定
输出 jpg 文件的尺寸 = 200x200 --> 错误
ffmpeg -y -i 输入.jpg -vf“转置=时钟:通过=景观,尺度=(iw*sar)最大(200/(iwsar)\,200/ih):ih最大(200/(iwsar)\,200/ih),crop=200:200" -q:v 1 输出.jpg;
这是在批处理过程中运行的,以数百个文件作为输入,并且在缩放和裁剪到 200x200 时总是发生相同的事情......
ffmpeg 输出是
ffmpeg 版本 4.1.3 版权所有 (c) 2000-2019 FFmpeg 开发人员
使用 gcc 8.3.1 (GCC) 20190414 构建
配置:--启用-gpl--启用-version3--启用-sdl2--启用-fontconfig--启用-gnutls--启用-iconv--启用-libass--启用-libbluray--启用-libfreetype--启用-libmp3lame--启用-libopencore-amrnb--启用-libopencore-amrwb--启用-libopenjpeg--启用-libopus--启用-libshine--启用-libsnappy--启用-libsoxr--启用-libtheora--启用-libtwolame--启用-libvpx--启用-libwavpack--启用-libwebp--启用-libx264--启用-libx265--启用-libxml2--启用-libzimg--启用-lzma--启用-zlib--启用-gmp--启用-libvidstab--启用-libvorbis--启用-libvo-amrwbenc --启用-libmysofa --启用-libspeex --启用-libxvid --启用-libaom --启用-libmfx --启用-amf --启用-ffnvcodec --启用-cuvid --启用-d3d11va --启用-nvenc --启用-nvdec --启用-dxva2 --启用-avisynth
libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100
输入 #0,图像 2,来自 '/_DEV/input.jpg':持续时间:00:00:00.04,开始:0.000000,比特率:144801 kb/s 流 #0:0:视频:mjpeg、yuvj444p(pc、bt470bg/unknown/unknown)、774x1032 [SAR 1:1 DAR 3:4]、25 tbr、25 tbn、25 tbc
流映射:
流 #0:0 -> #0:0 (mjpeg (原生) -> mjpeg (原生))
按 [q] 停止,按 [?] 获取帮助 [swscaler @ 050e4100] 使用了弃用的像素格式,请确保正确设置了范围
[Parsed_crop_2 @ 050d9140] 宽度“200”或高度“200”过大或非正值无效
[Parsed_crop_2 @ 050d9140] 无法在 Parsed_crop_2 上配置输入板
重新初始化过滤器时出错!
无法将帧注入过滤网络:参数无效
处理流 #0:0 的解码数据时出错
转换失败!
有什么办法可以修复这个问题吗?
答案1
问题是,当将输入缩放为 774x1032 时,它会变得小于 200x200,因此您无法将其裁剪为 200x200。这就是错误告诉您的。
您可以通过在裁剪宽度和高度中指定附加函数来“修复”这个问题min(…)
,以确保它只裁剪到min(ih,200)
和的最小值min(iw,200)
。