gpt4 book ai didi

python - 使用 ffmpeg 动态更改视频裁剪宽度、高度、x 和 y

转载 作者:行者123 更新时间:2023-12-04 23:11:17 25 4
gpt4 key购买 nike

我正在对视频进行对象检测,到目前为止,我已经获得了视频中对象的坐标。
现在我想给定对象的位置/坐标逐帧裁剪视频
到目前为止我的代码:

def crop_video(input_video_path, output_video_path, coordinate_list):

crop_ratio = 'crop=%s:%s:%s:%s' % (coordinate_list[0][0], coordinate_list[0][1], coordinate_list[0][2],coordinate_list[0][3])
subprocess.run(['ffmpeg', '-i', input_video_path, '-filter:v', crop_ratio, output_video_path])
crop_video函数仅使用坐标列表列表中的第一个索引来裁剪整个视频。如何改进代码以动态更改。
坐标列表与此类似:
 coordinate_list = [[147.5, 253.5, 927, 107],
[147.5, 253.5, 927, 107],
[147.0, 257.5, 928, 102],
[148.5, 258.5, 925, 104],
[148.5, 258.5, 925, 104],
[155.0, 258.5, 918, 103],
[155.0, 258.5, 918, 103],]
如何使用坐标列表动态更改裁剪宽度、高度、x 和 y。我是使用 ffmpeg 的新手

最佳答案

使用 sendcmd筛选。

  • 制作 commands.txt :
    0    crop w 148,
    crop h 254,
    crop x 925,
    crop y 108;

    0.04 crop w 142,
    crop h 252,
    crop x 927,
    crop y 107;

    0.08 crop w 147,
    crop h 258,
    crop x 928,
    crop y 102;
  • 文本的格式不必与上面完全相同。我添加了换行符以提高可读性。如果您愿意,可以将每个时间戳放在单独的行上。
  • sendcmd 使用时间戳,而不是帧号。此示例显示帧 1-3,并假设帧速率为 25 (1/25 = 0.04)。
  • 并非所有过滤器都可以使用 sendcmd(或音频版本 asendcmd)。查看 ffmpeg -filters 的输出.如果过滤器支持 (a)sendcmd,它将有 T在列表中的过滤器名称之前。
  • 并非所有过滤器选项都可以与 sendcmd 一起使用。见 FFmpeg Filters Documentation并寻找“命令”。

  • 运行ffmpeg :
    ffmpeg -i input.mp4 -filter_complex "[0:v]sendcmd=f=commands.txt,crop" output_%03d.png
  • 关于python - 使用 ffmpeg 动态更改视频裁剪宽度、高度、x 和 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67500959/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com