【问题标题】:ffmpeg: scale output cropped width/height doesn't work [closed]ffmpeg:缩放输出裁剪宽度/高度不起作用[关闭]
【发布时间】:2011-10-21 18:55:01
【问题描述】:

我正在尝试使用 ffmpeg 裁剪视频帧,并且我想自动缩放裁剪后的图像。 我在 av filter 看到了一个选项:http://ffmpeg.org/libavfilter.html#SEC41

./ffmpeg -i video.mp4 -vf "crop=640:480,scale=ow:oh" -f mpegts udp://127.0.0.1:1234

我收到一个错误:计算表达式'oh'时出错

【问题讨论】:

    标签: ffmpeg scale crop


    【解决方案1】:

    您实际上需要将owoh 替换为数字,分别代表视频缩放到的宽度和高度。

    【讨论】:

    • 我需要动态更改裁剪窗口(我在 ffmpeg 上做了一些更改),我想根据实际裁剪的窗口对其进行缩放。据我了解,'ow' 和 'oh' 值应该可以完成这项工作,不是吗?
    • 不。您必须在文档中注明owoh 的位置输入数字。
    • 您可以使用像 out_w 和 out_h 这样的常量表达式来代替 ow 和 oh(它们不是常量)。
    • ow/oh 是 out_w/out_h 的别名。这些是由 ffmpeg 设置的常量,不应交换为数字(这将失去拥有它们的全部意义)。
    【解决方案2】:

    我假设你得到:

    Error when evaluating the expression 'oh'.
    Maybe the expression for out_w:'ow' or for out_h:'oh' is self-referencing.
    

    因为您尝试将输出 w/h 设置为输出 w/h?!你想做的是

    ffmpeg -i video.mp4 -vf "crop=640:480,scale=iw:ih" -f mpegts udp://127.0.0.1:1234
    

    也就是说,将输出 w/h 设置为输入宽度 (iw) 和输入高度 (ih)。

    请注意,如果源视频小于您尝试裁剪为 (640:480) 的视频,您将收到错误消息。您可以使用 ffmpeg 的表达式语法首先检查是否需要裁剪/缩放以避免此错误。

    【讨论】:

      【解决方案3】:

      试试这个:

      ./ffmpeg -i video.mp4 -vf "scale=640:ih*640/iw, crop=640:480" -f mpegts udp://127.0.0.1:1234
      

      上面的代码会先将视频缩放到640,并保持纵横比高度, 然后裁剪为640x480.

      【讨论】:

      • crop如何选择要裁剪的部分?是否保证始终占据视频的准确中心640x480
      • @user779159 是的,它裁剪精确的中心。 “它默认为(in_w-out_w)/2”,详细说明here
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2020-07-28
      • 2011-04-09
      • 1970-01-01
      相关资源
      最近更新 更多