如果在视频后期捕获,ffmpeg仍然会失败

如果在视频后期捕获,ffmpeg仍然会失败,ffmpeg,Ffmpeg,我有一个12.035177s长的视频剪辑。当我尝试拍摄一帧的静像时失败: 命令: ffmpeg -loglevel debug -ss 00:00:08.1 -accurate_seek -i ./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps -y -frames:v 1 ./test9-before.jpg 错误: 输出文件为空,未编码任何内容(如果使用,请检查-ss/-t/-frames参数) 但是,如果我在剪辑的稍早部分使用still,

我有一个
12.035177s
长的视频剪辑。当我尝试拍摄一帧的静像时失败:

命令:

ffmpeg -loglevel debug -ss 00:00:08.1 -accurate_seek -i ./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps -y -frames:v 1 ./test9-before.jpg
错误:

输出文件为空,未编码任何内容(如果使用,请检查-ss/-t/-frames参数)

但是,如果我在剪辑的稍早部分使用still,它可以工作(工作示例中的注释8.0,失败示例中的注释8.1):

此外,如果我使用上面失败的命令将
-ss
移动到
-I
(输出缓冲区)之后,它也可以工作

比较工作与非工作的调试输出的差异,我在失败的示例中看到以下几行:

ffmpeg -loglevel debug -ss 00:00:08.0 -accurate_seek -i ./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps -y -frames:v 1 ./test9-before.jpg
[h264@0x7fbc3a01c200]帧编号间隙15 13

这些行(或类似的行)出现的频率更高:

cur_dts无效st:0(0)[init:0 i_done:0 finish:0](如果在每个流的开始处发生一次,则这是无害的)

168[h264@0x7fbc3a01c200]nal_单元类型:1(非IDR图片的编码切片),nal_参考数据:2

失败的示例中也存在这种情况:

ffmpeg -loglevel debug -ss 00:00:08.0 -accurate_seek -i ./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps -y -frames:v 1 ./test9-before.jpg
[out_0_0@0x7fbc3c6053c0]接收器链路out_0_0上的EOF:默认值

在接下来的示例中,我看到了失败示例中不存在的这一行:

ffmpeg -loglevel debug -ss 00:00:08.0 -accurate_seek -i ./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps -y -frames:v 1 ./test9-before.jpg
7以0.000008的速率转换剪裁帧
N 138[image2@0x7fba2f812000]打开“.jpg”之前的“/test9”进行写入
139[文件@0x7fba30130000]设置默认白名单“文件、加密、数据”
140[AVIOContext@0x7fba2e611b00]统计信息:0次寻道,2次写操作


如果您尝试在兴趣点周围捕获2帧(或3帧等),会发生什么

ffmpeg -loglevel debug -ss 00:00:08.1 -accurate_seek -i ./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps -y -frames:v 2 ./test9-before%d.jpg
说1帧后(时间刻度)和1帧前,如果它是15 fps,也许~:

ffmpeg -loglevel debug -ss 00:00:08.033 -accurate_seek -i ./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps -y -frames:v 3 ./test9-before%d.jpg

共享完整的调试日志@为了比较,将
-ss
标志移动到
-i
之后的调试输出:
ffmpeg-loglevel debug-accurrence_seek-i./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps-ss 00:00:08.1-y-帧:v1./test9 before.jpg
-对我来说,在尝试获取关键帧的点之后没有关键帧时,会出现这种情况尽管如此,
-ss
仍无法正确搜索。
ffmpeg-loglevel debug-ss 00:00:08.1-currence_seek-i./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps-y-frames:v2./test1.jpg
失败,显示“输出文件为空,未编码任何内容(检查-ss/-t/-frames参数,如果使用)”-3帧的情况也是如此,因此我会尝试转储所有帧,并尝试按每帧的数量/时间拍摄照片。它是MJPEG,所以每一帧都应该是分开的,但我在日志中注意到的一点是,比特率似乎很低,1536x2048x15 fps,如果我看得正确的话,只有200kbps。也许没有足够的带宽来编码一帧?此外,给定15 fps,8.1 s在帧之间,而8.0正好在帧力矩处。帧周期为1/15=0.0666666 s您是否尝试过在8.1333 s或8.0666(也在帧时间)时使用?(8.033是30帧/秒)顺便说一句,如果视频不是私有的,你能分享它吗?有趣的是,
ffmpeg-日志级调试-ss 00:00:08.0666-精确搜索-i./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps-y-帧:v1./test1.jpg
返回静止。不幸的是,此视频属于某个客户,因此我无法共享。我会四处寻找一个我们可以分享的。但是这失败了:
ffmpeg-logleveldebug-ss00:00:09-currence_seek-I./25e13b0b-d2e6-426a-920b-6bb2445a1324-original.ps-y-frames:v1./test1.jpg
-假设有一个帧正好在8s,那么就有一个帧正好在9s,对吗
00:00:09.1998
09.1332
09.0333
09.0666
如果是关于精确时间的逻辑,也会失败。因此,我将为每个帧时间(0.0666666)生成一个脚本,并查看哪个渲染帧。关于视频,如果它是关于ffmpeg的,我想它会被任何具有类似功能的15fps视频复制。顺便说一句,还有一点:ffmpeg已知在帧精确搜索方面存在问题。