Есть способ сделать то, что вы хотите, используя только scanf:
int readCoefficents(double complex *c) {
int i = 0;
double real;
double img;
char buf[2];
while (scanf("%1[\n]", buf) == 0) { // loop until a blank line or EOF
if (scanf("%lf %lf", &real, &img) == 2) // read two floats
c[i++] = real + img * I;
scanf("%*[^\n]"); // skip the rest of the line
scanf("%*1[\n]"); // and the newline
}
c[i++] = 1 + 0*I; // most significant coefficient is assumed to be 1
return i;
}
Если пользователь вводит только 1 поплавок в строке, он будет читать следующую строку для второго значения. Если какой-либо случайный мусор введен, он перейдет к новой строке и повторит попытку со следующей строкой. В противном случае он просто начнет считывать пары значений float до тех пор, пока пользователь не войдет в пустую строку или не достигнет EOF.
Все дело во времени. FFMpeg для работы использует фактически три разных временных метки в разных базах.
Этот вопрос также задавался в списках рассылки FFmpeg: Что означает вывод ffmpeg? tbr tbn tbc etc?