使用 FFMPEG 裁剪视频时出错

Posted

技术标签:

【中文标题】使用 FFMPEG 裁剪视频时出错【英文标题】:Error when cropping video using FFMPEG 【发布时间】:2018-06-10 01:51:03 【问题描述】:

问题:是否有一个 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] 无效太大或非正数 宽度“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】:

你需要条件表达式:

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

dar 是显示纵横比,即iw * sar / ih

【讨论】:

以上是关于使用 FFMPEG 裁剪视频时出错的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG::将视频上传到生产时出错

裁剪,使用 ffmpeg 重新排列视频帧的中间

ffmpeg使用filter crop 裁剪视频

Flutter音视频裁剪flutter_ffmpeg踩坑笔记

ffmpeg无损裁剪合并视频

使用 FFmpeg 裁剪视频会过度增加 tbn 值