linux ffmpeg对视频进行分割,得到准确的结果起始时间

rxztt3cl  于 2022-12-03  发布在  Linux
关注(0)|答案(1)|浏览(188)

我做了切经:

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没有列出所有的关键帧?

wlp8pajw

wlp8pajw1#

我认为这是不可能的。当你使用调试的详细级别时,你可以从程序中获得最多的信息。对于ffmpeg,我刚刚使用了

ffmpeg -v debug -i "Princess Chelsea - Frack.mp4" -ss 00:03:00.600 -c copy -to 00:03:03.800 3.mkv 2> out.txt

必须重定向输出,因为使用 debug 的输出太多,不适合终端。
不幸的是,它只给出一些隐晦的/内部消息,如
自动插入的位流筛选器“vp9_superframe '; args =''[matroska@0x55987904cac0]在偏移量为885字节处开始时间戳为5的新簇[matroska@0x55987904cac0]正在将大小为375的块写入偏移量为885的簇中,相对偏移量为9,pts为5,dts为5,持续时间为23。TrackNumber 2,keyframe 1
由于较少的冗长,它提供的信息较少。因此,我认为这是不可能的。然而,你的实际问题是什么?也许你需要一些不同的东西,除了只知道削减的时间?。
对于那些看起来如何在适当的时间实际削减(正如我正在寻找的):必须应用不是 * 拷贝 * 而是重新实际解码视频。

相关问题