# FFMPEG使用笔记
## 简介
最近用YOLO做一些项目,涉及到一些视频文件的处理,重新看了一些FFMPEG的资料,记录一些常用的操作及指令
### 将视频切分成不同的文件
$ ffprobe VIDEO_FILE.mp4
将输出视频VIDEO_FILE.mp4的metadata信息:时长,bitrate, Video format, resolution, fps等。
$ ffmpeg -i source-file.foo -ss 0 -t 600 -copy first-10-min.m4v$ ffmpeg -i source-file.foo -ss 600 -t 600 -copy second-10-min.m4v
或者先用播放器定位到想要的位置,然后再切。比如:
$ ffmpeg -i source.m4v -ss 0 -t 593.3 -c copy part1.m4v$ ffmpeg -i source.m4v -ss 593.3 -t 551.64 -c copy part2.m4v
也可以将之整合一下,加个loop做成脚本
同样,这种方法也可以用于在最终结果中对视频进行截取,剪切出最有代表性的片断。
### 提取视频帧 & 关键帧
1. 提取所有的帧,通常可用来做为所有结果的检查
ffmpeg -i video.webm thumb%04d.jpg -hide_banner
2. 只提取一帧
ffmpeg -i video.webm -ss 00:00:07.000 -vframes 1 thumb.jpg
3. 提取从特定时间开始的3帧
ffmpeg -i video.webm -ss 00:00:07.000 -vframes 3 thumb%04d.jpg -hide_banner
4. 每秒提取一帧
ffmpeg -i video.webm -vf fps=1 thumb%04d.jpg -hide_banner
5. 每5秒提取一帧
ffmpeg -i video.webm -vf fps=1/5 thumb%04d.jpg -hide_banner
6. 提取video文件中的所有关键帧
ffmpeg -i video.webm -vf "select=eq(pict_type\,I)" -vsync vfr thumb%04d.jpg -hide_banner
* 使用
"select=eq(pict_type\,I)"
会使用过滤器选择所有的关键帧
*
-vsync vfr:
告诉过滤器使用可变的bitrate视频同步,这个参数是必须的
### 对视频进行压缩
针对检测的结果,由于是无压缩直接生成的,视频会比较大,此时可以使用ffmpeg进行压缩.
ffmpeg -i input.mp4 -c:v libx264 -crf 24 -b:v 1M -c:a aac output.mp4
### 用多个图片生成新的视频
这个在做最后的演示的时候会需要用到
TODO:ADD Some Commands
## Reference