查看视频文件的总帧数
ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input_video.mp4
- -v error:这意味着只有错误才会被记录输出。
- -select_streams v:0:选择第一个视频流。
- -count_frames:计算视频流中的帧数。
- -show_entries stream=nb_read_frames:只显示读取的帧数(即总帧数)。
- -of default=nokey=1:noprint_wrappers=1:指定输出格式,使输出更加易于阅读。
删除指定帧数,比如删除视频文件中的前14帧的操作
ffmpeg -i camera_1_2024-03-01-16_39_53.mp4 -vf "select='gte(n,14)'" -vsync vfr output_video.mp4
- -i 指定输入文件。
- -vf 应用视频过滤器。select=‘gte(n,14)’ 是一个过滤器表达式,gte 表示 “greater than or equal”(大于等于),n 是当前帧的索引,从0开始。因此,此表达式的含义是选择所有帧号大于或等于14的帧。
- -vsync vfr 表示输出的视频帧率将改变以适应输入流的变化,确保视频同步(video sync)。
上述命令将从第15帧开始(因为帧计数从0开始)保留原视频中的所有帧,事实上删除了前14帧。
原视频中提取前100帧,并将这些帧存储为一个新的视频文件
ffmpeg -i input_video.mp4 -frames:v 100 -c:v libx264 -preset slow -crf 22 output_video.mp4
- -i input_video.mp4:指定输入文件,也就是你要从中提取帧的视频文件。
- -frames:v 100:指定要提取的帧数,这里是100帧。
- -c:v libx264:设置视频编码器为 libx264,这是创建高质量MP4文件的常用编码器。
- -preset slow:编码速度预设,slow 提供了一个良好的压缩率到速度的平衡点,如果速度不是问题,可以提供更好的视频质量。
- -crf 22:常量速率因子,设置视频的质量,在0(无损压缩)到51(最糟糕的质量)的范围内;默认值为23,更小的CRF值通常意味着更高的质量。
- output_video.mp4:输出文件的名称。
每隔5帧提取一帧
ffmpeg -i input.mp4 -vf "select=not(mod(n\,5))" -vsync vfr output_%04d.png
- -i input.mp4:指定输入文件,input.mp4是你的视频文件名。
- -vf “select=not(mod(n,2))”:视频过滤器(video filter),select过滤器用于选择帧。not(mod(n,2))是一个表达式,其中n代表帧号,mod(n,2)计算帧号n除以2的余数,not函数则取反。因此,这个表达式会选择那些帧号除以2余数为0的帧,即每隔2帧。
- output_%03d.jpg:指定输出文件名。%03d是一个格式化占位符,FFmpeg会自动为每个输出文件编号,例如output_001.jpg、output_002.jpg等。