[FFmpeg-user] Scale down if resolution is greater than given?
vedran
valajbeg at gmail.com
Wed Jul 29 17:27:47 CEST 2015
Anyway, thank you all guys. I did it like this, although i don't understand
well what this does
ffmpeg -i myvideo001.3gp -vf scale=1024:-1 -vb 600k -ac 2 -ab 96k -ar 44100
-f mp4 myvideo001out.mp4
On Wed, Jul 29, 2015 at 3:46 PM, Moritz Barsnick <barsnick at gmx.net> wrote:
> Hi Mahesh,
>
> On Wed, Jul 29, 2015 at 18:08:56 +0530, Mahesh Patade wrote:
> > Check this. I have written this logic in my script.
>
> Wow. If you're going to use scripting, why not use it to make life (and
> readability) easier instead of harder.
>
> For instance, just for my(!) readability, I would change this:
>
> > transcode() {
> > # 128 Bitrate
> > MULBIT128=$(echo ${1}|sed 's#x#*#g' |bc)
> > if [ ${REOLVIDEO} -gt ${MULBIT128} ]; then
> > if ! ffmpeg -threads ${CPUNO} -ss
> > ${START_TIME} -t ${LENGTH} -i "${FILENAME}" -s $1 -movflags rtphint
> > -b:v 128k -vcodec libx264 -acodec libfaac -ab 20k -ar 44100 -y
> > "${OUTPATH}${FILEWOEXT}.part${CURRENT_NODE}-128000.ts" >>
> > "${OUTPATH}${FILEWOEXT}.part${CURRENT_NODE}-128000.log.txt" 2>&1; then
> > ERROR=1
> > ERRORLOG="${ERRORLOG}Failed: 128 Bitrate
> Conversion"
> > fi
> > else
> > if ! ffmpeg -threads ${CPUNO} -ss
> > ${START_TIME} -t ${LENGTH} -i "${FILENAME}" -movflags rtphint -b:v
> > 128k -vcodec libx264 -acodec libfaac -ab 20k -ar 44100 -y
> > "${OUTPATH}${FILEWOEXT}.part${CURRENT_NODE}-128000.ts" >>
> > "${OUTPATH}${FILEWOEXT}.part${CURRENT_NODE}-128000.log.txt" 2>&1; then
> > ERROR=1
> > ERRORLOG="${ERRORLOG}Failed: 128 Bitrate
> Conversion"
> > fi
> > fi
>
> To this:
> > transcode() {
> > # 128 Bitrate
> > MULBIT128=$(echo ${1}|sed 's#x#*#g' |bc)
> > if [ ${REOLVIDEO} -gt ${MULBIT128} ]; then
> > SCALE="-s $1"
> > else
> > SCALE=""
> > fi
> > if ! ffmpeg -threads ${CPUNO} -ss
> > ${START_TIME} -t ${LENGTH} -i "${FILENAME}" $SCALE -movflags rtphint
> > -b:v 128k -vcodec libx264 -acodec libfaac -ab 20k -ar 44100 -y
> > "${OUTPATH}${FILEWOEXT}.part${CURRENT_NODE}-128000.ts" >>
> > "${OUTPATH}${FILEWOEXT}.part${CURRENT_NODE}-128000.log.txt" 2>&1; then
> > ERROR=1
> > ERRORLOG="${ERRORLOG}Failed: 128 Bitrate
> Conversion"
> > fi
>
> This makes the difference between the if and the else clause much
> clearer!
>
> MULBIT128, MULBIT256, MULBIT512 could also be differentiated by simple
> variables/function arguments, and one very common ffmpeg command line.
> That also makes modifying other arguments to ffmpeg much easier. You
> don't have to do it X times. That's the whole point of scripting! SCNR.
>
> > eval $(ffprobe -v error -of flat=s=_ -select_streams
> > v:0 -show_entries stream=height,width "${FILENAME}")
> > SIZE=${streams_stream_0_width}x${streams_stream_0_height}
> >
> > REOLVIDEO=$(echo ${SIZE} |sed 's#x#*#g' | bc)
> > RESOLUTION=$(echo "scale=1;
> > $streams_stream_0_width/$streams_stream_0_height" | bc)
>
> So REOLVIDEO is the number of pixels, RESOLUTION is what we usually
> call the aspect ratio? I wouldn't use that to choose the target sizes,
> but just maintain the aspect ratio. But that's your call.
>
> I would use this filter now (we can ignore Mahesh's multi-bitrates for
> this question):
>
> $ ffmpeg [...] -vf
> "scale=w=if(gt(iw*ih\,1280*720)\,iw*min(1280/iw\,1024/ih)\,iw):h=-2" [...]
>
> This scales any video with more pixels than 1280*720 inside of a box of
> 1280*720. An improvement would be to scale it to the correct number of
> pixels. More math. ;-)
>
> Moritz
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
More information about the ffmpeg-user
mailing list