FFMPEG -f segment 和 FFPROBE 关键帧不同
FFMPEG -f segment and FFPROBE keyframes are different
我有一个在线视频编辑器。我想要快速剥离和连接 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 也不同,但更多的关键帧具有正确的时间戳
如果未设置-segment_time
,则默认为2秒,而27.569236
距离26.234568
不到2秒,因此段muxer不会在那个时候开始段KF。
设置 -segment_time 0.001
以确保为每个 KF 生成一个片段,因为 ffmpeg 只会在下一个关键帧剪切,除非还设置了 -break_non_keyframes 1
。
我有一个在线视频编辑器。我想要快速剥离和连接 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 也不同,但更多的关键帧具有正确的时间戳
如果未设置-segment_time
,则默认为2秒,而27.569236
距离26.234568
不到2秒,因此段muxer不会在那个时候开始段KF。
设置 -segment_time 0.001
以确保为每个 KF 生成一个片段,因为 ffmpeg 只会在下一个关键帧剪切,除非还设置了 -break_non_keyframes 1
。