Я пытаюсь создать видео из серии скриншотов.Скриншоты находятся в базе данных и имеют динамический FPS (1-3 FPS).Как я могу создать видеофайл с постоянным FPS?
Перед выполнением av_packet_rescale_ts
я попытался на лету изменить значение st^.codec.time_base.den
между 1 и 3.
Это основной циклкодирования одного изображения:
repeat
fillchar(pkt, sizeof(TAVPacket), #0);
av_init_packet(@pkt);
(* encode the image *)
ret := avcodec_encode_video2(st^.codec, @pkt, frame, got_packet);
if (ret < 0) then
begin
writeln(format('Error encoding video frame: %s', [av_err2str(ret)]));
exit;
end;
if (got_packet > 0) then
begin
(* rescale output packet timestamp values from codec to stream timebase *)
av_packet_rescale_ts(@pkt, st^.codec.time_base, st^.time_base);
pkt.stream_index := st^.index;
log_packet(oc, @pkt);
(* Write the compressed frame to the media file. *)
av_interleaved_write_frame(oc, @pkt);
end;
inc(frame.pts);
until (av_compare_ts(frame.pts, st^.codec^.time_base, 1, av_make_q(1, 1)) >= 0);
Изменение FPS на лету приводит к сбою вывода видео.Если я не изменю значение st^.codec.time_base.den
, видео ускоряется и замедляется.