使用fmpeg从MP4文件中提取仅Y帧(YUV420p)吗?

我的主要目标是提取 th I + 1'(下一个), I-1'th ( mp4视频中仅Y格式(YUV 420)的帧)。我现在使用的程序是

  1. 我使用命令-ffprobe "input.mp4" -show_frames | grep 'pict_type=I' -A 1 > frame_info.txt

  2. 从视频中提取了所有I帧的列表
  3. 接下来,我使用python脚本解析此txt文件,以查找所有 I帧的编号,然后使用命令-{{1 }}这是通过python的子进程调用发生的。

  4. 这对于240p或480p之类的小分辨率视频效果很好,但是一旦我移至1080p视频,即使是单个帧的提取时间也呈指数增长。要提取该帧号,就必须解码mp4文件,直到这一点。

我有很多1080p文件,我想减少时间。我正在考虑的解决方案是从mp4中提取所有Y帧(YUV 420),然后仅选择I帧,因为我从第1步中获得了所有I帧的列表。。我为此使用的命令是-ffmpeg -i input.mp4 -vf select='eq(n\,{1}),setpts=N/25/TB,extractplanes=y' -vsync 0 -pix_fmt gray {1}.yuv

  • 具有上述代码的问题是它仅连续地将其附加到yuv文件,但是我希望为一帧mp4视频添加一个单独的y文件

  • 我的限制是仅在FFmpeg的Y值与我想要的匹配时使用FFmpeg。

TL:DR-我只想从mp4视频中提取(YUV 420p的)Y部分。 y帧是第I,I-1和I + 1帧。

感谢您的帮助。

wangyan_world 回答:使用fmpeg从MP4文件中提取仅Y帧(YUV420p)吗?

在步骤1中,不存储帧号,而是存储pts_time。

然后,在第2步中运行

ffmpeg -copyts -ss X -i input.mp4 -vf select='eq(t\,X),extractplanes=y' -vsync 0 -pix_fmt gray -vframes 1 {1}.yuv

其中X是pts_time。

本文链接:https://www.f2er.com/2808990.html

大家都在问