Php ffmpeg从cropdetect获取值

Php ffmpeg从cropdetect获取值,php,ffmpeg,Php,Ffmpeg,是否可以运行cropdetect并在一行中进行裁剪,然后从视频中获取拇指 像这样的 或者可能需要在2行中运行,首先运行cropdetect,然后运行cropdetect并从视频中生成拇指,但通过这种方式,我需要从cropdetect?到控制台的输出中获取值,以便您可以解析输出,然后将其用作变量: ffmpeg -i input -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1 这将导

是否可以运行cropdetect并在一行中进行裁剪,然后从视频中获取拇指

像这样的

或者可能需要在2行中运行,首先运行cropdetect,然后运行cropdetect并从视频中生成拇指,但通过这种方式,我需要从cropdetect?

到控制台的输出中获取值,以便您可以解析输出,然后将其用作变量:

ffmpeg -i input -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1
这将导致如下结果:

crop=640:480:0:50
然后运行实际裁剪命令:

ffmpeg -i input -vf $cropvalue,scale=240:-1 -vframes 1 -qscale:v 2 output.jpg
  • -vcodec mjpeg
    -an
    -f rawvideo
    都是多余的

  • 使用
    -qscale:v
    控制jpg输出质量。正常范围为2-5(值越低质量越高)

  • 使用过滤器而不是
    -s
    ;特别是如果你已经在使用过滤器。此外,
    scale
    过滤器将允许您设置特定的宽度或高度,并且使用
    -1
    它将自动提供正确的值以保留纵横比。否则,如果您试图强制使用特定的大小,则可能会导致输出被压扁或拉伸


显然,我不是PHP程序员,但这至少应该给你一个想法。

Hmm无法从$cropvalue中获得裁剪值。。。我在php中运行这段代码,但当我在comand行中运行时,我得到值我只创建如下函数:
函数crop($id){$d=shell_exec(“ffmpeg-i$id-t1-vframes 1-ss 50-vf cropdetect-f null-2>&1 | awk'/crop/{return$NF}'| tail-1”);$array=explode('crop=',$d);$cropvalue=$array[1]$cropvalue='crop='.$cropvalue;return$cropvalue;}
然后我会在新的一行中调用'crop(“111.mp4”)'我会在你的cropdetect中更加严格,这会在电影中寻找10分钟,并分析电影2分钟。。对结果值进行排序,然后使用uniq,因此使用最“常用”的值
ffmpeg-ss 600-i$filename-f matroska-t 120-an-vf cropdetect=24:16:0-y-crf 51-preset ultrafast/dev/null 2>&1 | grep-o crop=.*sort-bh | uniq-c | sort-bh | tail-n1 | grep-o crop=..*.
我知道有点晚了,但你使用的是
$array=explore('crop='crop='d')$cropvalue=$array[1]在您的输出上。当您在此值分解输出时,必须使用
$cropvalue=$array[0]因为在PHP中数组从0开始。shell_exec命令的输出类似于
crop=1440:1072:240:4
或类似内容。所以,您不需要分解部分和连接字符串。只需使用shell_exec的输出,因此
返回shell_exec(“…”)
@HashimAziz
-vframes 1
将输出限制为1帧,并且在输出单个图像的情况下可以避免错误:
无法从模式“output.jpg”中获取帧文件名编号2(可以先设置updatefirst,也可以在文件名模式中使用类似%03d的模式)
。之所以使用它,是因为在原始问题中,想要输出单个JPEG图像。如果要输出视频,请删除
-vframes 1
ffmpeg -i input -vf $cropvalue,scale=240:-1 -vframes 1 -qscale:v 2 output.jpg