音视频系列5: ffmpeg-python

1. 快速上手

使用pip install ffmpeg-python进行安装
两种使用方式,一般用第二种:

import ffmpeg
stream = ffmpeg.input('input.mp4')
stream = ffmpeg.hflip(stream)
stream = ffmpeg.output(stream, 'output.mp4')
ffmpeg.run(stream)

import ffmpeg
(
    ffmpeg
    .input('input.mp4')
    .hflip()
    .output('output.mp4')
    .run()
)

下面是一个综合例子:
音视频系列5: ffmpeg-python_第1张图片
代码如下:

import ffmpeg

in_file = ffmpeg.input('input.mp4')
overlay_file = ffmpeg.input('overlay.png')
(
    ffmpeg
    .concat(
        in_file.trim(start_frame=10, end_frame=20),
        in_file.trim(start_frame=30, end_frame=40),
    )
    .overlay(overlay_file.hflip())
    .drawbox(50, 50, 120, 120, color='red', thickness=5)
    .output('out.mp4')
    .run()
)

结果如下图:
音视频系列5: ffmpeg-python_第2张图片

2. 常用功能

2.1 获取视频信息(ffprobe)

probe = ffmpeg.probe(args.in_filename)
video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
width = int(video_stream['width'])
height = int(video_stream['height'])

2.2 视频thumbnail

音视频系列5: ffmpeg-python_第3张图片

2.3 将视频转为数组

音视频系列5: ffmpeg-python_第4张图片

2.4 读取视频帧

在这里插入图片描述

# 指定帧数读取任意帧
out, err = (
    ffmpeg.input(in_file)
          .filter('select', 'gte(n,{})'.format(frame_num))
          .output('pipe:', vframes=1, format='image2', vcodec='mjpeg')
          .run(capture_stdout=True)
)

# 基于时间提取
out, err = (
        ffmpeg.input(in_file, ss=time)
              .output('pipe:', vframes=1, format='image2', vcodec='mjpeg')
              .run(capture_stdout=True)
    )

2.6 图片集合转为视频

音视频系列5: ffmpeg-python_第5张图片
加入其它的filter:
音视频系列5: ffmpeg-python_第6张图片

2.7 音视频混合

音视频系列5: ffmpeg-python_第7张图片

2.8 左右声道混合

音视频系列5: ffmpeg-python_第8张图片

2.9 输出到pipe中

下面的例子用了interact,可以逐帧查看。
音视频系列5: ffmpeg-python_第9张图片

2.10 pipeline功能查看

音视频系列5: ffmpeg-python_第10张图片

2.11 加入tensorflow streaming

音视频系列5: ffmpeg-python_第11张图片

3. 视频流处理

3.1 本地视频转为http server

音视频系列5: ffmpeg-python_第12张图片
使用ffplay进行播放:
在这里插入图片描述

3.2 RTSP server转为TCP socket

音视频系列5: ffmpeg-python_第13张图片

你可能感兴趣的:(音视频系列)