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
posted @ 2024-02-28 16:12  coffee_tea_or_me  阅读(192)  评论(0编辑  收藏  举报