package org.ffmpeg.android.filters; public class CropVideoFilter extends VideoFilter { private String mOutWidth; private String mOutHeight; private String mX; private String mY; public CropVideoFilter (String width, String height, String x, String y) { mOutWidth = width; mOutHeight = height; mX = x; mY = y; } @Override public String getFilterString() { StringBuffer result = new StringBuffer(); result.append("crop="); if (mOutWidth != null) result.append(mOutWidth).append(":"); if (mOutHeight != null) result.append(mOutHeight).append(":"); if (mX != null) result.append(mX).append(":"); if (mY != null) result.append(mY).append(":"); result.deleteCharAt(result.length()-1); //remove the last semicolon! return result.toString(); } } /* Crop the input video to out_w:out_h:x:y:keep_aspect The keep_aspect parameter is optional, if specified and set to a non-zero value will force the output display aspect ratio to be the same of the input, by changing the output sample aspect ratio. The out_w, out_h, x, y parameters are expressions containing the following constants: ‘x, y’ the computed values for x and y. They are evaluated for each new frame. ‘in_w, in_h’ the input width and height ‘iw, ih’ same as in_w and in_h ‘out_w, out_h’ the output (cropped) width and height ‘ow, oh’ same as out_w and out_h ‘a’ same as iw / ih ‘sar’ input sample aspect ratio ‘dar’ input display aspect ratio, it is the same as (iw / ih) * sar ‘hsub, vsub’ horizontal and vertical chroma subsample values. For example for the pixel format "yuv422p" hsub is 2 and vsub is 1. ‘n’ the number of input frame, starting from 0 ‘pos’ the position in the file of the input frame, NAN if unknown ‘t’ timestamp expressed in seconds, NAN if the input timestamp is unknown The out_w and out_h parameters specify the expressions for the width and height of the output (cropped) video. They are evaluated just at the configuration of the filter. The default value of out_w is "in_w", and the default value of out_h is "in_h". The expression for out_w may depend on the value of out_h, and the expression for out_h may depend on out_w, but they cannot depend on x and y, as x and y are evaluated after out_w and out_h. The x and y parameters specify the expressions for the position of the top-left corner of the output (non-cropped) area. They are evaluated for each frame. If the evaluated value is not valid, it is approximated to the nearest valid value. The default value of x is "(in_w-out_w)/2", and the default value for y is "(in_h-out_h)/2", which set the cropped area at the center of the input image. The expression for x may depend on y, and the expression for y may depend on x. Follow some examples: # crop the central input area with size 100x100 crop=100:100 # crop the central input area with size 2/3 of the input video "crop=2/3*in_w:2/3*in_h" # crop the input video central square crop=in_h # delimit the rectangle with the top-left corner placed at position # 100:100 and the right-bottom corner corresponding to the right-bottom # corner of the input image. crop=in_w-100:in_h-100:100:100 # crop 10 pixels from the left and right borders, and 20 pixels from # the top and bottom borders "crop=in_w-2*10:in_h-2*20" # keep only the bottom right quarter of the input image "crop=in_w/2:in_h/2:in_w/2:in_h/2" # crop height for getting Greek harmony "crop=in_w:1/PHI*in_w" # trembling effect "crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)" # erratic camera effect depending on timestamp "crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)" # set x depending on the value of y "crop=in_w/2:in_h/2:y:10+10*sin(n/10)" */