我做了切经:
ffmpeg -i long_clip.mp4 -ss 00:00:10.0 -c copy -t 00:00:04.0 short_clip.mp4
我需要知道ffmpeg进行剪切的精确时间(00:00:10.0之前最近关键帧的时间)
目前,我使用以下ffprobe命令列出所有关键帧,并选择00:00:10.0之前最近的关键帧
ffprobe -show_frames -skip_frame nokey long_clip.mp4
它的工作速度非常慢(我在Jetson Nano上运行它,列出30秒视频的关键帧需要几分钟,尽管切割是在0. 2秒内完成的)
我希望有一种更快的方法来知道ffmpeg进行剪切的关键帧的时间,至少因为ffmpeg寻找到这个关键帧并在不到半秒的时间内剪切视频。
**换句话说,问题是:**如何获得关键帧的时间,其中ffmpeg没有列出所有的关键帧?
1条答案
按热度按时间wlp8pajw1#
我认为这是不可能的。当你使用调试的详细级别时,你可以从程序中获得最多的信息。对于
ffmpeg
,我刚刚使用了必须重定向输出,因为使用 debug 的输出太多,不适合终端。
不幸的是,它只给出一些隐晦的/内部消息,如
自动插入的位流筛选器“vp9_superframe '; args =''[matroska@0x55987904cac0]在偏移量为885字节处开始时间戳为5的新簇[matroska@0x55987904cac0]正在将大小为375的块写入偏移量为885的簇中,相对偏移量为9,pts为5,dts为5,持续时间为23。TrackNumber 2,keyframe 1
由于较少的冗长,它提供的信息较少。因此,我认为这是不可能的。然而,你的实际问题是什么?也许你需要一些不同的东西,除了只知道削减的时间?。
对于那些看起来如何在适当的时间实际削减(正如我正在寻找的):必须应用不是 * 拷贝 * 而是重新实际解码视频。