我可以在普通视频(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上更合适吗?
答案 0 :(得分:1)
使用最新版本的ffmpeg(4.0+),使用
ffmpeg -fflags +genpts -i videofile.avi -c copy -segment_time 60 -f segment "videofile-part.%03d.mp4"
该genpts将分配丢失的PTS。