在特定时间将关键帧插入m4v / mp4

时间:2018-08-23 22:48:20

标签: video ffmpeg html5-video

我有一个针对教育工作者的程序(使用electronjs框架编写),该程序可以播放视频,并跳至伴随JSON文件中定义的视频中的预设点。有时,跳过后会有明显的延迟,this answer表示存在延迟是因为关键帧不常见。

假设这是正确的,我想在mp4文件的确切位置插入关键帧,我知道播放器会跳到该关键点。但是,其中一些视频文件已经很大,因此我不想减小关键帧间隔,从而使文件更大。我只需要在整个文件中强制几个关键帧。

我希望能够传递一个参数(例如,传递给ffmpeg),以及我想强制设置关键帧的时间。最好,我希望不重新编码整个视频(就像this unanswered question一样这样做,但是如果我必须重新编码视频,我也可以这样做。

1 个答案:

答案 0 :(得分:1)

您可以使用ffmpeg使用-force_key_frames选项在关键帧中插入关键帧。

例如:

./ffmpeg -i input.mp4 -c:a copy -c:v copy -force_key_frames 0:05:00,0:10:00 out.mp4

会将关键帧尽可能地靠近5和10s标记。时间值可以采用hh:mm:ss格式,也可以仅为几秒钟(单个值,无冒号)。

您可以使用以下方法检查是否在需要的位置插入了帧:

./ffprobe -select_streams v:0 -skip_frame nokey -show_entries frame=pkt_pts_time out.mp4