ffmpeg - 如何使用 FFMPEG 正确裁剪和缩放?
问题描述
我正在尝试删除视频的顶部和底部黑条。
我想要达到的目标
视频本身是 1280x720 16:9,但图像信息部分是4:3,因为它是从 VHS 捕获的。我想以某种方式拉伸它,直到顶部条消失而不使图像变形。我不在乎左右栏。
我尝试使用crop
但scale
没有运气。
通过使用此代码,在正常屏幕上时 VLC 上的顶部和底部黑条消失了,但在全屏时,条再次出现。
ffmpeg -i test.avi -filter:v "crop=1280:670" output_video.mp4
我认为这与视频的比例有关,但老实说,scale
我尝试使用的每个代码都会使图像变形很多。
我希望有人可以帮助我,对 FFMPEG 还很陌生,但到目前为止真的很享受。
解决方案
我得到了你的图片,将其调整为 720p,制作了一个 30 秒的视频进行测试。
在我的示例中,我还裁剪了边缘(左/右),因为正如@LordNeckbeard 所提到的,当它们碰到屏幕的一侧时,它们可能会阻止视频的顶部/底部到达屏幕的顶部/底部,这将再次看起来像顶部/底部的黑条,无论它们是否存在。
这对我有用:
ffmpeg -y -hide_banner -i "test.avi" -filter:v "crop=iw-400:ih-40,scale=960:720" -pix_fmt yuv420p output_video.mp4
快速解释:
crop=iw-400:ih-40
从输入宽度 (iw) 裁剪 400 (2x200 左/右) 从输入高度 (ih) 裁剪 40 (2x20 顶部/底部) 如果你想要一个“更清晰”的边缘,你可以剪掉更多。
scale=960:720
稍微缩放视频以使其恢复到原始的 720p,960 将其保持在良好的 4x3 比例。不需要这种缩放,您的偏好。
让我知道它是否对您有用。
推荐阅读
- mysql - 不是每次都运行查询的 MySQL VIEW
- c# - ServiceFabric ApiGateway 上的 ApplicationInsights 端到端中断
- elasticsearch - 基于元素的Elasticsearch脚本排序存在于数组中
- kubernetes - Kubernetes 卷挂载设置类型检查失败
- tcp - 如何启用 NVIDIADeepstreamSDK Azure IoTEdge 模块从本地 rtsp 接收消息?
- laravel - 在 Laravel 中从多对多关系中获取不同或唯一的记录
- ruby-on-rails - 在omniauth 更新后Rails 服务器停止运行(中断设计)
- weka - 读取 csv 文件但使用制表符分隔符
- php - Phpoffice 库不能写超过 14 位数字
- azure - Azure Function App 无法更新表行