【问题标题】:FFmpeg cropping: 'Invalid too big or non positive size for width '2304' or height '4096'FFmpeg 裁剪:'对于宽度'2304'或高度'4096'的无效太大或非正尺寸
【发布时间】:2022-01-13 05:35:56
【问题描述】:

我正在尝试将视频裁剪为 1080:1920 格式,它适用于大多数视频,但有时会失败并出现如下错误:

对于宽度“2304”或高度“4096”而言,尺寸过大或非正数无效

这是我正在使用的代码:

import ffmpy

ffmpy.FFmpeg(inputs={"input.mp4": None}, outputs={"output.mp4": ["-y", "-vf", "crop=ih*(9/16):ih,scale=1080:1920", "-preset", "ultrafast"]})`

【问题讨论】:

    标签: python video ffmpeg


    【解决方案1】:

    错误原因是ih*(9/16) > frame_width

    我们无法裁剪超出框架边界的矩形。

    例如:
    假设 input.mp4 的分辨率为 100x200(100 为宽度)。
    ih = 200
    ih*(9/16) = 112.5
    我们无法裁剪 112x200 像素,因为帧宽度只有 100 像素...


    为了重现问题,我们可以使用 FFmpeg(命令行工具)创建合成视频:

    ffmpeg -y -f lavfi -i testsrc=size=100x200:rate=1:duration=5 input.mp4
    

    (合成视频仅用于演示)。


    在执行ffmpy.FFmpeg(inputs={"input.mp4": None}, outputs={"output.mp4": ["-y", "-vf", "crop=ih*(9/16):ih,scale=1080:1920", "-preset", "ultrafast"]}) 时,我们收到一条错误消息:

    对于宽度“112”或高度“200”而言,尺寸过大或非正数无效


    为了解决这个问题,我们可能会检查height*9/16 <= width
    我们可以使用 OpenCV(或我们找到的任何其他软件包)获得视频分辨率(widthheight)。
    现在我们可以检查if height*9/16 <= width,如果条件为假,则使用其他裁剪参数。


    代码示例:

    import ffmpy
    import cv2
    
    # Get video resolution using OpenCV
    cap = cv2.VideoCapture('input.mp4')
    width  = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
    cap.release()
    
    crop_w = height*9/16
    
    if crop_w <= width:
        # We can do the cropping only when the cropped area is inside frame boundaries.
        ff = ffmpy.FFmpeg(inputs={"input.mp4": None}, outputs={"output.mp4": ["-y", "-vf", "crop=ih*(9/16):ih,scale=1080:1920", "-preset", "ultrafast"]})
    else:
        ff = ffmpy.FFmpeg(inputs={"input.mp4": None}, outputs={"output.mp4": ["-y", "-vf", "crop=iw:iw*(16/9),scale=1080:1920", "-preset", "ultrafast"]})
    
    ff.run()
    

    注意:我们实际上不必复制代码的一部分(我使用复制来演示)。

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 2018-11-02
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 2021-07-02
      相关资源
      最近更新 更多