我的主要目标是从 mp4 视频中以仅 Y(YUV 420)的形式提取第 I'th、I+1'th(下一个)、I-1'th(上一个)帧。我现在使用的程序是
ffprobe "input.mp4" -show_frames | grep 'pict_type=I' -A 1 > frame_info.txt
从视频中提取了所有 I 帧的列表。 ffmpeg -i input.mp4 -vf select='eq(n\,{1}),setpts=N/25/TB,extractplanes=y' -vsync 0 -pix_fmt gray {1}.yuv
提取所有帧这是通过来自 python 的子进程调用发生的。 我有很多 1080p 文件,我希望减少时间。我正在考虑的解决方案是从 mp4 中提取所有 Y 帧(YUV 420),然后只选择 I 帧,因为我已经从 中获得了所有 I 帧的列表。第 1 步。 .我使用的命令是 -
ffmpeg -y -i input.mp4 -vf "fps=59.94" -pix_fmt gray file_name.yuv
TL:DR - 我只想从 mp4 视频中提取 Y 部分(YUV 420p)。 y 帧是第 I 帧、第 I-1 帧和第 I+1 帧。
感谢您的帮助。
最佳答案
在步骤 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。
关于python-3.x - 使用ffmpeg从MP4文件中仅提取Y(YUV420p)帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634002/