如何分割关键帧为“ pkt_pts_time = N / A”的视频?

时间:2019-04-05 23:46:22

标签: video split avconv ffprobe

我可以在普通视频(mkv上的h264)上运行这样的命令:
avconv -i videofile.avi -c copy -flags +global_header -segment_time 60 -f segment "videofile-part."%03d".mp4"

但是在具有这种格式和容器(至少我拥有)的视频上,它会失败:
.avi文件上的MPEG-4

如果我进行探测,则会得到拆分器忽略的关键帧:
ffprobe videofile.avi -show_entries frame=key_frame,pict_type,pkt_pts_time -select_streams v -of compact -v 0 | grep frame=1(从https://stackoverflow.com/a/48687236/1422630开始)

我得到很多:
“ frame | key_frame = 1 | pkt_pts_time = N / A | pict_type = I”

正常视频会输出如下所示的行:
“ frame | key_frame = 1 | pkt_pts_time = 44.252542 | pict_type = I”

显然,avconv需要有效的“ pkt_pts_time”才能工作...

或者(不需要命令行工具):
是否可以在视频中添加适当的关键帧(带有值的pkt_pts_time)以使其被avconv正确分割,这是一种快速的方法吗?
还是我应该快速将大视频(复制视频流)转换为具有avconv检测到的关键帧的格式?

糟糕:
我正在使用linux ubuntu。
我正在使用avconv创建一个bash脚本,但是可以使用其他可脚本化的工具(命令行工具)。

PS。:这种方法在Unix stackexchange上更合适吗?

1 个答案:

答案 0 :(得分:1)

使用最新版本的ffmpeg(4.0+),使用

ffmpeg -fflags +genpts -i videofile.avi -c copy -segment_time 60 -f segment "videofile-part.%03d.mp4"

该genpts将分配丢失的PTS。