Home FFMPEG读取视频流
Post
Cancel

FFMPEG读取视频流

平时都用opencv来解析视频流,但opencv集成的ffmpeg对比如h.264格式确不支持,因而还得使用ffmpeg。下面列出几种实用的用法:

ffmpeg工作流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 _______              ______________
|       |            |              |
| input |  demuxer   | encoded data |   decoder
| file  | ---------> | packets      | -----+
|_______|            |______________|      |
                                           v
                                       _________
                                      |         |
                                      | decoded |
                                      | frames  |
                                      |_________|
 ________             ______________       |
|        |           |              |      |
| output | <-------- | encoded data | <----+
| file   |   muxer   | packets      |   encoder
|________|           |______________|

从上图可知,ffmpeg先是从输入文件中读取编码的数据包,然后再解码。

获取视频的相关信息

1
ffmpeg i input.mp4

输出的结果:

1
2
3
4
5
6
7
8
9
10
11
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : hikvision
    encoder         : Lavf57.83.100
  Duration: 00:01:31.28, start: 0.000000, bitrate: 1007 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1280x720, 1006 kb/s, 25.07 fps, 25 tbr, 90k tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler

从以上的输出可以获取视频的帧率是25,分辨率是1280*760,时长是1分31秒。

从视频流中抽取图片

1
ffmpeg -i input.mp4 %04d.png

表示从视频流中顺序的抽取图片,图片的格式为0001.png, 0002.png, 0003.png…..

以固定的帧率抽取图片

1
ffmpeg -i input.mp4 -vf fps=1 %04d.png

表示将以帧率为1的速率从视频中抽取图片。

以固定的速率抽取图片

1
ffmpeg -i input.mp4 -vf fps=1/4 %04d.png

表示以每4秒抽1张的速率从视频中抽取图片。

抽取固定时间段的视频

1
2
3
ffmpeg -ss 00:00:04 -i input.mp4 %04d.png
ffmpeg -ss 00:00:04 -i -t 2 input.mp4 %04d.png
ffmpeg -ss 00:00:04.0 -i -to 00:00:06.0 input.mp4 %04d.png

表示从第4秒开始抽取图片,而-t表示抽取2s,-to表示抽取到第6秒。

抽取一帧

1
ffmpeg -ss 00:00:04 -i input.mp4 -frames:v 1 screen.png

表示抽取第四秒的那一帧图片。

自定义分辨率

1
2
ffmpeg -i input.mp4 -s 640x480 %04d.png
ffmpeg -i input.mp4 -vf scale=640:-1 %04d.png

前者表示固定的640x480分辨率抽取图片,后者表示保持长宽比,缩放到640x357.

reference

[1]https://www.bannerbear.com/blog/how-to-extract-images-from-a-video-using-ffmpeg/ [2]https://ffmpeg.org/ffmpeg.html

This post is licensed under CC BY 4.0 by the author.
Contents

pytorch中如何持久化保存和加载模型

windows中如何安装jdk并配置环境变量