使用 FFMPEG 裁剪视频时出错
Error when cropping video using FFMPEG
问题:是否有适用于所有视频的单一 FFMPEG 裁剪滤镜,包括(但不限于):856x480、640x480 和 1280x720?
我们有一个视频处理系统(使用 DirectShow),所有输入该系统的视频都必须 16:9 使用 MJPEG 编解码器。我们使用以下 ffmpeg 命令将源视频转换为 MJPEG,缩放像素使其呈正方形,然后将它们裁剪为 16:9 纵横比。这对大多数输入视频都很有效,输出正是我们想要的。
ffmpeg -i "1280x720input.mp4" -filter:v "scale=iw*sar:ih,crop=iw:iw/16*9" -codec:v mjpeg -q:v 2 -codec:a pcm_s16le -r 30 -y "output.avi"
但是,当我们使用分辨率为 856x480 的输入视频时,出现以下错误:
[Parsed_crop_1 @ 0000000004615720] Invalid too big or non positive
size for width '852' or height '480'
我尝试了一个不同的裁剪过滤器,它在计算中使用输入高度而不是输入宽度,它适用于 856x480
ffmpeg -i "856x480input.mp4" -filter:v "scale=iw*sar:ih,crop=ih*16/9:ih" -codec:v mjpeg -q:v 2 -codec:a pcm_s16le -r 30 -y "output.avi"
然而,这 不适用于 其他 16:9 (1280x720) 或 4:3 (640x480) 格式的源视频。是否有适用于所有视频的单一裁剪命令?
您需要条件表达式:
crop='if(gte(dar,16/9),ih*16/9,iw)':'if(gte(dar,16/9),ih,iw*9/16)'
dar
是显示纵横比即 iw * sar / ih
问题:是否有适用于所有视频的单一 FFMPEG 裁剪滤镜,包括(但不限于):856x480、640x480 和 1280x720?
我们有一个视频处理系统(使用 DirectShow),所有输入该系统的视频都必须 16:9 使用 MJPEG 编解码器。我们使用以下 ffmpeg 命令将源视频转换为 MJPEG,缩放像素使其呈正方形,然后将它们裁剪为 16:9 纵横比。这对大多数输入视频都很有效,输出正是我们想要的。
ffmpeg -i "1280x720input.mp4" -filter:v "scale=iw*sar:ih,crop=iw:iw/16*9" -codec:v mjpeg -q:v 2 -codec:a pcm_s16le -r 30 -y "output.avi"
但是,当我们使用分辨率为 856x480 的输入视频时,出现以下错误:
[Parsed_crop_1 @ 0000000004615720] Invalid too big or non positive size for width '852' or height '480'
我尝试了一个不同的裁剪过滤器,它在计算中使用输入高度而不是输入宽度,它适用于 856x480
ffmpeg -i "856x480input.mp4" -filter:v "scale=iw*sar:ih,crop=ih*16/9:ih" -codec:v mjpeg -q:v 2 -codec:a pcm_s16le -r 30 -y "output.avi"
然而,这 不适用于 其他 16:9 (1280x720) 或 4:3 (640x480) 格式的源视频。是否有适用于所有视频的单一裁剪命令?
您需要条件表达式:
crop='if(gte(dar,16/9),ih*16/9,iw)':'if(gte(dar,16/9),ih,iw*9/16)'
dar
是显示纵横比即 iw * sar / ih