问题描述
我可以在普通视频(在mkv上为h264)上运行这样的命令:
avconv -i videofile.avi -c复制-flags + global_header -segment_time 60 -f段 videofile-part。%03d .mp4
I can run a command like this on normal videos (h264 on mkv):avconv -i videofile.avi -c copy -flags +global_header -segment_time 60 -f segment "videofile-part."%03d".mp4"
但在具有这种格式和容器的视频上(我至少有)会失败:
.avi文件上的
MPEG-4
but on videos with this format and container (the ones I have at least) it will fail:
MPEG-4 on a .avi file
如果我对其进行探测,则会得到拆分器忽略的关键帧:
ffprobe videofile.avi -show_entries frame = key_frame,pict_type,pkt_pts_time -select_streams v -of compact -v 0 | grep frame = 1
(从本技巧开始)
if I probe it I get key frames that are ignored by the splittter:ffprobe videofile.avi -show_entries frame=key_frame,pict_type,pkt_pts_time -select_streams v -of compact -v 0 | grep frame=1
(from this tip https://stackoverflow.com/a/48687236/1422630)
,我得到了很多:
frame | key_frame = 1 | pkt_pts_time = N / A | pict_type = I
and I get a lot of this:
"frame|key_frame=1|pkt_pts_time=N/A|pict_type=I"
正常视频会输出如下所示的行:
frame | key_frame = 1 | pkt_pts_time = 44.252542 | pict_type = I
a normal video would output lines like this:
"frame|key_frame=1|pkt_pts_time=44.252542|pict_type=I"
因此,显然avconv需要有效的 pkt_pts_time才能工作...
so clearly avconv needs valid "pkt_pts_time" to work...
或者(不需要命令行工具):
是否可以在视频中添加适当的关键帧(带有值的pkt_pts_time)以使其可以被avconv正确分割?
还是我应该转换
Alternatively (not requiring a command line tool):
any fast way to add proper keyframes (pkt_pts_time with value) to the video to let it be splitted properly by avconv?
or may be I should convert a big video fastly (copying the video stream) into a format that has normal keyframes detected by avconv?
Obs。:
$可以将大视频快速地(复制视频流)快速转换为具有由avconv检测到的关键帧的格式? b $ b我正在使用linux ubuntu。
我正在使用 avconv
创建一个bash脚本,但是可以接受其他可脚本编写的工具(命令行工具)
Obs.:
I am using linux ubuntu.
I am creating a bash script using avconv
, but other scriptable tools (command line tools) are acceptable if they work.
PS。:这种方法在unix stackexchange上是否更合适?
PS.: would this fit better on unix stackexchange?
推荐答案
使用最新版本的ffmpeg(4.0+),请使用
Using a recent version of ffmpeg (4.0+), use
ffmpeg -fflags + genpts -i videofile.avi -c复制-segment_time 60 -f段 videofile-part。%03d.mp4
分配丢失的PTS。
这篇关于如何分割具有奇怪关键帧“ pkt_pts_time = N / A”的视频?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!