for(y=0; y<height; y++) {
fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);
}
Да, это правильно.
Это запись строки размером 3 байта / пиксель (предположительно RGB) из указателя AVFrame-> data.
пс. Причина, по которой это происходит так, заключается в том, что начало каждой строки данных начинается с новой границы в 4 байта памяти - компьютер более эффективен для доступа к памяти кратным 32 битам (4 байта).
Поэтому, если ваш размер пикселя (3 байта) и ширина не кратны 4, вам нужно сделать это, а не просто скопировать width*height*3
байт данных.