ffmpeg get value from cropdetect

2019-03-16 14:51发布

问题:

Its possible to run cropdetect and crop in one line and get thumbs from video?

something like this

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

Or maybe need to run in 2 line, first run cropdetect and than run crop and generate thumbs from video, but in this way i need to get value from cropdetect?

回答1:

cropdetect outputs to the console, so you can parse the output and then use it as a variable:

ffmpeg -i input -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1

This will result in something like:

crop=640:480:0:50

Then run your actual crop command:

ffmpeg -i input -vf $cropvalue,scale=240:-1 -vframes 1 -qscale:v 2 output.jpg
  • -vcodec mjpeg, -an, and -f rawvideo are superfluous

  • Use -qscale:v to control jpg output quality. A sane range is 2-5 (a lower value is a higher quality).

  • Use the scale filter instead of -s; especially if you're already using filters. Also the scale filter will allow you to set a specific width or height and with -1 it will automatically provide the correct value to preserve aspect. Otherwise if you try to force a specific size you can risk a squished or stretched output.

Obviously I'm not a PHP coder, but this should give you an idea at least.



标签: php ffmpeg