项目场景:
项目场景:需要对YUV视频抽帧,直接用ffmpeg命令行
。
ffmpeg -i input_video.mp4 -vf "select='not(mod(n\,30))'" -vsync vfr output_frames/%04d.png
-i input_video.mp4 指定了输入视频文件的路径和文件名。
-vf “select=‘not(mod(n,30))’” 使用视频滤镜来选择帧。这个过滤器使用 mod(n,30) 条件,其中 n 表示帧的编号,mod(n,30) 表示帧编号对30取模。select=‘not(mod(n,30))’ 意味着选择满足条件 mod(n,30) 不为零的帧,也就是每隔30帧的帧。
-vsync vfr 设置输出帧的时间戳以匹配源视频的帧速率。这意味着输出帧将以与输入视频相同的速率保存。(这里一般设置vfr为0)
output_frames/%04d.png 指定了输出帧的文件名模板。%04d 是一个占位符,用于生成四位数的帧编号,.png 指定了输出帧的图像格式,你可以根据需要更改为其他格式(如.jpg)。
问题描述
提示:这里描述项目中遇到的问题:
picture no 0x0 size之类的话
Picture size 0x0 is invalid
原因分析:
提示:这里填写问题的分析:
提取yuv视频要输入视频分辨率,不能像mp4那样直接提取:
解决方案:
提示:这里填写该问题的具体解决方案:
加上视频格式和分辨率
os.system('ffmpeg -y -pix_fmt yuv444p -s 1920x1024 -i videos_crop/' + video_name[i] + ' -vf "select=not(mod(n\,30))" -vsync 0 ' + savepath)