我可以在普通视频(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)
我得到了很多这个: “帧| key_frame = 1 | pkt_pts_time = N / A | pict_type = I”
普通视频会输出这样的行: “帧| 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更合适吗?
使用最新版本的ffmpeg(4.0+),使用
ffmpeg -fflags +genpts -i videofile.avi -c copy -segment_time 60 -f segment "videofile-part.%03d.mp4"
种族将分配缺失的PTS。