首页 > 解决方案 > 如果在视频后期捕获,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 参数)

但是,如果我从剪辑中稍早一点的静止图像中提取它,它就可以工作(注意工作示例中的 8.0 与失败示例中的 8.1):

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

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

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

[h264 @ 0x7fbc3a01c200] 帧数间隙 15 13

这些行(或类似的东西)出现得更频繁:

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

168 [h264 @ 0x7fbc3a01c200] nal_unit_type:1(非 IDR 图片的编码切片),nal_ref_idc:2

这也出现在失败的示例中:

[out_0_0 @ 0x7fbc3c6053c0] 接收器链接 out_0_0 上的 EOF:默认值。

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

7 以 0.000008
n 138 [image2 @ 0x7fba2f812000] 打开 './test9-before.jpg' 以写入
139 [file @ 0x7fba30130000] 设置默认白名单 'file,crypto,data'
140 [AVIOContext @ 0x7fba2e611b00] 统计: 0 次搜索,2 次写入

在此处输入图像描述

标签: ffmpeg

解决方案


如果您尝试在兴趣点周围捕获 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

推荐阅读