Python3利用ffmpeg针对视频进行一些操作

    FFmpeg是个啥?    

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。


    首先去官网https://www.ffmpeg.org/download.html下载windows下的压缩包


    解压缩后,配置一下环境变量

    

输入命令查看版本


ffmpeg -version
安装ffmpeg的python扩展,该扩展可以让你直接在python脚本中直接调用,而不需要单独运行命令



pip install ffmpeg-python



需要注意一点的是,有的情况调用该库会报错,这时需要将python安装目录下Lib文件夹的subprocess.py文件中大概656行中的shell参数改为True


获取视频详细信息


import ffmpeg

info = ffmpeg.probe("/xxx/xxx/test.mp4")

也可以只提取一些重要信息,比如视频时长,分辨率,宽高等


info = ffmpeg.probe(str(file))
vs = next(c for c in info['streams'] if c['codec_type'] == 'video')
self.duration_secs = float(vs['duration'])
self.format = info['format']['format_name']
self.codec_name = vs['codec_name']
self.width = vs['width']
self.height = vs['height']
self.num_frames = vs['nb_frames']

提取视频缩略图

def get_frames_by_times():
    times = [5]
    for time in times:
        input_file = '/Users/didi/Desktop/ffmpeg/test.mp4'
        output_file = '/Users/didi/Desktop/ffmpeg/image/image-' + str(time) + '.jpg'
        out, err = (
            ffmpeg
                .input(input_file, ss=time)
                .output(output_file, vframes='1', f='image2')
                .run(quiet=False, overwrite_output=True)
        )
        if out == b'':
            print('do nothing')


将视频的片段提取为动图

ffmpeg -ss 00:00:03 -t 3 -i Test.mov -s 640x360 -r  15  dongtu.gif