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 参数)
但是,如果我从剪辑中稍早一点的静止图像中提取它,它就可以工作(注意工作示例中的 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 次写入
解决方案
如果您尝试在兴趣点周围捕获 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
推荐阅读
- cmd - 我无法对程序文件使用 where 命令
- r - 修改一行数据以获得漂亮的输出(摘要),重塑 - 将行拆分为新的多列
- java - 缓冲阅读器抛出异常
- testing - 赛普拉斯,如何检查属性是否存在
- python - Fizzbuzz Challenge in Twilio quest
- html - 如何在 WordPress 中让这些行彼此相邻?
- python - tkinter - 为什么会有像 bbox 这样的东西?
- python - Tensorflow:PartialTensorShape:合并期间不兼容的等级:2 vs. 1
- php - 调用未定义的函数 apcu_add()
- c# - 内联方法以提高性能,但在 C# 中执行速度较慢