Não consegui descobrir nenhuma maneira fácil de reproduzir argumentos ffmpeg
e resolver meu problema. Então eu percebi outra solução alternativa também sugerida pelo usuário: dstob.
Digamos que eu precise armazenar 10 quadros por segundo, então eu posso iterar o tempo em 0,1 segundo e usando o argumento -ss
eu posso buscar o filme naquele timestamp em particular. Agora eu vou saber qual frame extrair e o timestamp desse frame também. A seguir está o meu código, embora seja no MATLAB, a idéia geral é fazer uma iteração ao longo do tempo.
%your movie name
movie = 'movie_name.mp4';
%get the duration of movie in seconds
[to,te] = system(['ffprobe -i ' movie ' -show_format -v quiet | grep duration']);
tmp_ = strsplit(te,'=');
total_time = floor(str2num(tmp_{2}));
%initialize the timer in milliseconds
curr_time = 0;
while curr_time < total_time*1000
%iterate 10 times in 1 second to get 10 frames
for i=1:10
time_ = curr_time + 100*i;
milli_sec = floor(mod(time_,1000)); %milliseconds
time_ = floor(time_ / 1000);
sec = floor(mod(time_,60)); %seconds;
time_ = floor(time_ / 60);
min = floor(mod(time_,60)); %minutes;
hour = floor(time_ / 60); %hour
frame_name = sprintf('out_%.2d_%.2d_%.2d_%.3d.png',hour,min,sec,milli_sec);
%Set the ffmpeg command to seek it to the time you want and
%store the frame
cmnd = sprintf('ffmpeg -ss %.2d:%.2d:%.2d.%.3d -i %s -frames:v 1 %s',hour,min,sec,milli_sec,movie,frame_name);
system(cmnd);
end;
curr_time = curr_time + 1000; %increment the timer by 1 second
end;
Espero que ajude.