如何拆分具有奇怪关键帧 "pkt_pts_time=N/A" 的视频?
How to split a video that has weird keyframes "pkt_pts_time=N/A"?
我可以 运行 在普通视频(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
(来自此提示 )
我得到了很多:
"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 吗?
使用最新版本的ffmpeg (4.0+),使用
ffmpeg -fflags +genpts -i videofile.avi -c copy -segment_time 60 -f segment "videofile-part.%03d.mp4"
genpts 将分配缺少的 PTS。
我可以 运行 在普通视频(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
(来自此提示
我得到了很多:
"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 吗?
使用最新版本的ffmpeg (4.0+),使用
ffmpeg -fflags +genpts -i videofile.avi -c copy -segment_time 60 -f segment "videofile-part.%03d.mp4"
genpts 将分配缺少的 PTS。