【问题标题】:FFMPEG -f segment and FFPROBE keyframes are differentFFMPEG -f 段和 FFPROBE 关键帧不同
【发布时间】:2019-07-18 12:46:48
【问题描述】:

我有一个在线视频编辑器。我想要快速剥离和连接 mp4 文件。为此,我使用这样的代码:

获取关键帧:

exe_ffprobe("-select_streams v -skip_frame nokey -show_frames -show_entries frame=pkt_pts_time,pict_type $input_file");

样本结果:

array (
  0 => '0.083417',
  1 => '2.085419',
  2 => '4.170838',
...
  12 => '24.149149',
  13 => '26.234568',
  14 => '27.569236',       < Why ffmpeg missed this keyframe?
  15 => '29.654655',
...
  230 => '466.966967',
  231 => '469.052386',
  232 => '471.137804',
  233 => '473.223223',
  234 => '475.308642',
  235 => '477.394061',
  236 => '479.479479',
)
...

对于分割视频:

exe_ffmpeg("-y -i $input_file -c copy -map 0 -segment_list segments.csv -f segment -reset_timestamps 1 path/to/%d.mp4");

示例结果:

0.mp4,0.000000
1.mp4,2.085419
2.mp4,4.170838
...
12.mp4,24.149149
13.mp4,26.234568
14.mp4,29.654655
15.mp4,31.740073
...
230.mp4,475.308642
231.mp4,477.394061
232.mp4,479.479479
end

但是来自 ffprobe 的关键帧数和分割视频数是不同的。

那么我如何正确分割或获取关键帧,以匹配计数

此外,关键帧和segments.csv 也不同,但更多关键帧具有正确的时间戳

【问题讨论】:

    标签: ffmpeg ffprobe


    【解决方案1】:

    如果-segment_time没有设置,默认为2秒,27.569236距离26.234568不到2秒,所以segment muxer不会在那个KF开始一个segment。

    设置-segment_time 0.001 以确保为每个KF 生成一个片段,因为除非还设置了-break_non_keyframes 1,否则ffmpeg 只会在下一个关键帧处剪切。

    【讨论】:

    • 谢谢,它的工作。为什么第一帧不一样?
    • 第一段从头开始。
    猜你喜欢
    • 2020-05-16
    • 2019-05-22
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多