ffmpeg从cropdetect获取值

Mil*_*vic 8 php ffmpeg

它可以在一行中运行cropdetect和crop并从视频中获取大拇指吗?

这样的事情

ffmpeg -ss 1 -i 0.flv -vf cropdetect=24:16:0,crop=w:h:x:y -vcodec mjpeg -vframes 1 -an -f rawvideo -s 240x180 0.jpg
Run Code Online (Sandbox Code Playgroud)

或者可能需要在2行中运行,首先运行cropdetect而不是运行裁剪并从视频生成拇指,但是这样我需要从cropdetect获取价值?

llo*_*gan 17

cropdetect 输出到控制台,因此您可以解析输出,然后将其用作变量:

ffmpeg -i input -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1
Run Code Online (Sandbox Code Playgroud)

这将导致类似于:

crop=640:480:0:50
Run Code Online (Sandbox Code Playgroud)

然后运行您的实际裁剪命令:

ffmpeg -i input -vf $cropvalue,scale=240:-1 -vframes 1 -qscale:v 2 output.jpg
Run Code Online (Sandbox Code Playgroud)
  • -vcodec mjpeg,-an-f rawvideo是多余的

  • 使用-qscale:v控制JPG输出品质.理智的范围是2-5(较低的值是更高的质量).

  • 使用scale过滤器而不是-s; 特别是如果你已经使用过滤器了.此外,scale过滤器将允许您设置特定的宽度或高度,并且-1它将自动提供正确的值以保留方面.否则,如果您尝试强制使用特定尺寸,则可能会出现挤压或拉伸输出的风险.

显然我不是PHP编码器,但至少应该给你一个想法.

  • 我会在你的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 | 尾巴-n1 | grep -o crop =.*` (4认同)