On Thu, 11 Jan 2018, Frank Tetzel wrote:
The thing I am trying to achieve is a compromise between these two
extremes, eg. a method which gives less cropping at the LH & RH
picture edges for the price of a little padding above and below the
picture. I'm presuming this (ideally) involves scaling, padding and
cropping together in a single filter.
Just pick a bigger width for the scale and pad filter, and then add
crop as the last filter, cropping to the final resolution. Add crop
with another comma to the filter chain as you did with scale and pad.
Also, have a look at the filter documentation:
http://ffmpeg.org/ffmpeg-filters.html
Many thanks for those hints which were just what I needed. Below is a
worked example of my solution, should it be helpful to anyone else. The
scaling/padding/cropping code is a little opaque but writing it this way
enabled the whole thing to be written using ffmpeg's own parser. If
anyone is interested I can show how it was derived.
Recapping: Setting newfactor=0 shows the whole original 1280x720 picture
downscaled in letterbox format on the 4x3 display. With newfactor=1.0 the
picture fills the whole 4x3 screen height and crops left and right. I
found newfactor=0.5 was a good compromise between the two limits.
The other settings (codecs, bit rates etc.) were intended to mirror the
PAL DVD format, the target device being a DVD player. The output file
played nicely on it.
Cheers
Tom Crane.
#!/bin/sh
OW=720
OH=576
newfactor="$1" # scaling factor
OUTFILE=/tmp/tmp.avi
# Scale, pad and crop to a compromise between letterbox format (newfactor=0)
and a LH+RH cropped picture (newfactor=1)
ffmpeg -y -i demo.mp4 -vf \
"scale=iw*min(($OW * ((($OH/ih)*(iw/$OW) -1) * $newfactor +
1))/iw\,($OH * ((($OH/ih)*(iw/$OW) -1) * $newfactor + 1))/ih): \
ih*min(($OW * ((($OH/ih)*(iw/$OW) -1) * $newfactor +
1))/iw\,($OH * ((($OH/ih)*(iw/$OW) -1) * $newfactor + 1))/ih), \
pad=($OW * ((($OH/ih)*(iw/$OW) -1) * $newfactor + 1)):
\
($OH * ((($OH/ih)*(iw/$OW) -1) * $newfactor + 1)):
\
(($OW * ((($OH/ih)*(iw/$OW) -1) * $newfactor + 1))-iw*min(($OW *
((($OH/ih)*(iw/$OW) -1) * $newfactor + 1))/iw\,($OH * ((($OH/ih)*(iw/$OW) -1) *
$newfactor + 1))/ih))/2: \
(($OH * ((($OH/ih)*(iw/$OW) -1) * $newfactor + 1))-ih*min(($OW *
((($OH/ih)*(iw/$OW) -1) * $newfactor + 1))/iw\,($OH * ((($OH/ih)*(iw/$OW) -1) *
$newfactor + 1))/ih))/2: \
green, \
crop=$OW:$OH" \
-c:v mpeg2video -c:a ac3 -f dvd -r 25 -pix_fmt yuv420p -g 15 -b:v
6000000 -maxrate 9000000 -minrate 0 -bufsize 1835008 -packetsize 2048 -muxrate
10080000 -b:a 448000 -ar 48000 \
$OUTFILE
exit 0
_______________________________________________
ffmpeg-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".