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?
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.