使用FFMPEG

时间:2017-12-29 16:46:07

标签: ffmpeg crop

问题:是否有一个适用于所有视频的FFMPEG裁剪滤镜,包括(但不限于):856x480,640x480和1280x720?

我们有一个视频处理系统(使用DirectShow),使用MJPEG编解码器输入此系统的所有视频必须是16:9。我们使用以下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]无效太大或非正面   宽度'852'或高度'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)格式与其他源视频一起使用。是否有一个适用于所有视频的裁剪命令?

1 个答案:

答案 0 :(得分:1)

你需要条件表达式:

crop='if(gte(dar,16/9),ih*16/9,iw)':'if(gte(dar,16/9),ih,iw*9/16)'

dar是显示宽高比,即iw * sar / ih