Problem setting video frame rate using AVAssetWriter/AVAssetReader
Here is an idea to select frames. Suppose the fps of source video is F and target fps is TF. rate = TF/F
Initiate a variable n equal to -rate and add rate each time,when the integer part of n changed, select the frame.
e.g. rate = 0.3 n: -0.3 0 0.3 0.6 0.9 1.2 1.5 1.8 2.1 ^ ^ ^frame index: 0 1 2 3 4 5 6 7select 0 4 7
float rate = 0.39999f; // TF/F float n = -rate; // to make sure first frame will be selectedfor (int i = 0; i < 100; ++i, n += rate) { // i stands for frame index, take a video with 100 frames as an example int m = floor(n); int tmp = n+rate; // if rate > 1.0 repeat i // if rate < 1.0 some of the frames will be dropped for (int j = 0; m+j < tmp; ++j) { // Use this frame printf("%d ", i); }}