FFmpeg 常见功能使用之格式转换与查看
1、利用 ffplay 查看YUV数据包括视频或者图片
ffplay [-f rawvideo] -video_size 640x480 test.yuv
注:
(1)-f rawvideo 经测试,此选项可加可不加。
(2)yuv 文件不包含宽高数据所以必须用 -video_size widthxheight
指定宽和高。
(3)test.yuv 可以是一帧(图片)或者多帧(视频)数据。
多输入多输出流处理
当我们想要对同时获取到的不同的输入流进行不同的操作时,可以使用-map
来进行输入和输出之间的映射,即指定某个输入对应某个输出,中间的过程只对指定的输入进行。
如下例所示,将四个输入流分别保存下来。
ffmpeg -i /dev/video0 -i /dev/video1 -i /dev/video2 -i /dev/video3 \
-map 0:v -vcodec libx264 -vb 50M -vframes 500 -y result_test/out_v0.mp4 \
-map 1:v -vcodec libx264 -vb 50M -vframes 500 -y result_test/out_v1.mp4 \
-map 2:v -vcodec libx264 -vb 50M -vframes 500 -y result_test/out_v2.mp4 \
-map 3:v -vcodec libx264 -vb 50M -vframes 500 -y result_test/out_v3.mp4
2、使用 FFmpeg 将 MOV 转为 MP4
将 MOV 格式转为 MP4 格式并获得极高质量的一种方法是在重新编码时使用 CRF 参数。
ffmpeg -i input.mov -vcodec libx264 -crf 18 -acodec aac -b:a 128K -movflags +faststart output.mp4
参数解析
-vcodec libx264
将 H.264/AVC 编解码器的视频编解码器设置为 libx264-crf 18
将 CRF 值设置为 18-acodec aac
将音频编码器设置为AAC-b:v 2M
及-b:a 128K
表示将视频和音频比特率分别指定为2M和128k。-movflags +faststart
设置FFmpeg的特定标志。+faststart
标志会重新排列 MP4 文件的元数据,以便在线流式传输时可以在完全下载之前开始播放。
3、视频加速
ffmpeg -i input.mp4 -an -filter:v "setpts=0.5*PTS" output.mp4
- 调整速度倍率范围[0.25, 4]
- 只调整视频,可以把音频禁掉,节省开销
- 对视频加速时,如果不想丢帧,可以添加-r参数指定帧率。
4、MOV转换成gif
ffmpeg -i input.mov -vf "scale=360:-1" -r 15 -b:v 512K output.gif
上述两个功能组合使用,可以通过filter_complex选项来进行
ffmpeg -i input.mov -an -filter_complex "[0:v]setpts=0.4*PTS[res];[res]scale=720:-1" -r 15 -b:v 3M -y output.gif
5、WEBM格式转换成MP4
ubuntu系统通过ctrl-shift-alt-r
快捷键录制的视频,默认保存成WEBM格式的视频文件,编码格式是VP8。
如果我们像使用ffmpeg将其转换成mp4格式,可以使用如下指令
ffmpeg -i vp8_record_test.webm -vcodec libx264 -crf 18 -an -y record_test.mp4
- crf 当用H.264编码视频时,可以通过固定码率因子(Constant Rate Factor)来控制视频质量,取值范围是[0-51],0代表无损,默认值是23,值越小视频质量越好。
6、去除视频中重复帧
ffmpeg -i input.mp4 -vf mpdecimate,setpts=N/FRAME_RATE/TB -map 0:v output.mp4