python 项目 通过FFmpeg截取视频部分并生成gif


ffmpeg 命令
ffmpeg -ss 00:00:01 -t 3 -i 视频路径 -vf crop=iw:ih*2/3 -s 320x240 -r 7 存储的gif路径
ffmpeg参数说明:
  • -ss 00:00:01表示从视频第一秒开始截取
  • -t 表示截图3秒钟的视频
  • -vf crop=iw:ih*2/3 表示截取视频的部分区域,其中宽为视频宽度,高为原视频的2/3
  • -r 7 表示每秒帧率为7帧
  • 最后直接加上要生成的gif的路径就会把截取好的视频输出为gif了。
python代码实现:
def get_video_thumbnail_gif(file):
    path = os.path.join(settings.MEDIA_ROOT, file.name)
    gif_name = '%s%s' % (file.name, '.thumb.gif')
    gif_path = os.path.join(settings.MEDIA_ROOT, gif_name)

    if os.path.isfile(path):
        try:
            process = subprocess.Popen(
                ['ffmpeg', '-ss', '00:00:01', '-t', '3', '-i', path, '-vf', 'crop=iw:ih*3/3', '-s', '640x480', '-r', '7', gif_path],
                stdout=subprocess.PIPE, stderr=subprocess.PIPE
            )
            if process.wait() == 0:
                return gif_name
        except OSError:
            pass
    return ''

附件: