【问题标题】:Creating thumbnails from video files with Python使用 Python 从视频文件创建缩略图
【发布时间】:2010-12-18 20:37:43
【问题描述】:

上传到运行 python 的 webapp 后,我需要为视频文件创建缩略图。

我将如何处理...

【问题讨论】:

标签: python video thumbnails


【解决方案1】:

查看PythonMagick,这是 ImageMagick 的 Python 接口。那应该有你需要的。 (免责声明:我以前没有使用过 Python 接口,但我知道 ImageMagick 是个好东西。)

【讨论】:

    【解决方案2】:

    PyMedia 和PIL 的简单组合可以处理 AVI、ASF 或 MPEG 文件。 PyMedia 允许您提取帧(使用 decoder() 例程),而 PIL 有一个简单的 thumbnail() 例程。

    【讨论】:

    • PyMedia 在 python 3.x 上不工作你有其他可能的解决方案吗?
    • @EduardoMaia 这些天我可能会首先调用外部包,如 ffmpeg 或 libav.org 的 libav。
    • 我正在使用 ffmpeg。只是,当你和其他人一起工作时,如果它是一个 python 包会更容易。我只是将它放在 requirements.txt 中,他们只是将它与其他东西一起安装......但是当它是一个外部包时,他们必须安装它,将环境变量放在他们的虚拟环境的激活脚本中,以及所有这些东西...
    • @EduardoMaia 好点。不幸的是,我最近不需要对视频做任何事情,所以我无法提供更好的答案。如果您找到了,请告诉我,我可以将其包含在答案中。
    【解决方案3】:

    您可以使用 Youtube API 进行存储和转码,并免费获取提要缩略图。老实说,这是处理在线视频的最简单方法,而且我不只是在向 3rd 方服务先令,我对该 API 和内部视频路径的使用非常满意,感谢它,我能够删除内部视频路径。

    【讨论】:

    • 如果网站是一个内容管理系统,用户可以上传自己的视频,那么这样做是否可行?在这种情况下,您将如何将视频存储在 youtube 中?您需要在 YouTube 中有一个频道,但您不知道该用户是否在 YouTube 中有一个帐户。我是正确的还是我遗漏了什么?
    【解决方案4】:

    您可以使用ffvideo

    from ffvideo import VideoStream
    pil_image = VideoStream('0.flv').get_frame_at_sec(5).image()
    pil_image.save('frame5sec.jpeg')
    

    【讨论】:

    • ffvideo 在 python 3.x 上不工作你有其他可能的解决方案吗?
    【解决方案5】:
    import cv2
    vcap = cv2.VideoCapture(filename)
    res, im_ar = vcap.read()
    while im_ar.mean() < threshold and res:
          res, im_ar = vcap.read()
    im_ar = cv2.resize(im_ar, (thumb_width, thumb_height), 0, 0, cv2.INTER_LINEAR)
    #to save we have two options
    #1) save on a file
    cv2.imwrite(save_on_filename, im_ar)
    #2)save on a buffer for direct transmission
    res, thumb_buf = cv2.imencode('.png', im_ar)
    # '.jpeg' etc are permitted
    #get the bytes content
    bt = thumb_buf.tostring()
    

    “阈值”是一个整数。当您获得一个视频帧时,它可以是非常黑色、白色等以获得一些好的缩略图,您可以指定帧中所有像素的平均值。

    【讨论】:

      【解决方案6】:

      我无法在 OSX Sierra 上安装 ffvideo,所以我决定使用 ffmpeg。

      OSX:

      brew install ffmpeg
      

      Linux:

      apt-get install ffmpeg
      

      Python 3 代码:

      import subprocess
      video_input_path = '/your/video.mp4'
      img_output_path = '/your/image.jpg'
      subprocess.call(['ffmpeg', '-i', video_input_path, '-ss', '00:00:00.000', '-vframes', '1', img_output_path])
      

      【讨论】:

      • 这是 2019 年的有效答案
      • 我得到 Stream #0:0 -> #0:0 (h264 (native) -> png (native)) 按 [q] 停止,[?] 寻求帮助 无法确定格式EOF 错误将过滤器标记为已完成错误后的输入流 0:0。有什么建议吗?
      【解决方案7】:

      您可以使用在 GitHub 上找到的 Python 脚本 pyvideothumbnailer,该脚本使用 MoviePy、MediaInfo 和 PIL fork Pillow。它应该为您完成全部工作。

      【讨论】:

        【解决方案8】:

        使用 pyffmpeg

        安装

        pip install pyffmpeg
        

        使用

        from pyffmpeg import FFmpeg
        
        inf = 'vid.mp4'
        outf = 'thumb.jpg'
        
        ff = FFmpeg()
        ff.convert(inf, outf)
        

        【讨论】:

          猜你喜欢
          • 2012-03-13
          • 1970-01-01
          • 2016-02-05
          • 2015-01-24
          • 2013-01-06
          • 2018-05-15
          • 1970-01-01
          • 2012-02-24
          • 1970-01-01
          相关资源
          最近更新 更多