zoukankan      html  css  js  c++  java
  • 打算设计一个每3秒刷新一帧的电影播放机

    原文地址:https://shumeipai.nxez.com/2020/10/13/how-to-build-a-very-slow-movie-player-in-2020.html

    制造一台这样的黑白相框,用一年的时间来放一部老电影,每天的咖啡都能品出不同的灵感。

    它用到了树莓派、电子墨水屏和宜家相框,以及 VSMP(Very Slow Movie Player 超慢速电影播放)技术。将普通电影的每秒 24 帧播放速度降至每小时 24 帧,放慢了 3600 倍,这样一部 142 分钟的影片「2001: A Space Odyssey」(2001 太空漫游)由它播放完,将耗时大约一年。

    当人们习惯用两倍速疯狂刷剧的时候,用一年时间欣赏一部经典电影无疑是一种轻奢、不浮躁的生活态度。

    材料清单

    • 树莓派4B × 1
    • 电子墨水屏 × 1
    • MicroSD 卡 × 1
    • 5V 3A TYPE-C 电源适配器 × 1
    • 木质相框 × 1

    制造一台这样的相框大概需要搞定下面几个事情:
    1、将电影文件和控制程序上传到树莓派上。
    2、安装好电子墨水屏以及树莓派上的驱动程序。
    3、编程(或者直接使用本项目提供的代码)从电影文件中提取帧,调整每一帧的尺寸并处理抖动。逐帧显示在屏幕上。
    4、找一个可以装得下以上组件的相框,组装好。

    这个项目没有很复杂的硬件部分,所用到的软件和驱动程序都已经提供了,只需要安装和部署即可使用。制造所用的材料合计约 120 英镑。

    准备好树莓派

    推荐使用 2GB 内存以上的树莓派 + Raspberry Pi OS。为树莓派安装好系统,参考:
    https://shumeipai.nxez.com/2019/04/17/write-pi-sd-card-image-using-etcher-on-windows-linux-mac.html

    通过配置 WiFi,让树莓派接入网络,参考:
    https://shumeipai.nxez.com/2017/09/13/raspberry-pi-network-configuration-before-boot.html

    开启 SSH,使用 PuTTY 登录树莓派终端。传输文件和电影可以通过 SFTP,使用 FileZilla 即可。

    安装电子墨水屏

    这里使用了 Waveshare 的一款墨水屏,带驱动板。将驱动板插入树莓派的 GPIO 即完成屏幕和树莓派的连接。驱动这个屏幕需要启用树莓派的 SPI 接口。运行 sudo raspi-config 进入配置工具来启用 SPI。

    下面来下载并安装驱动软件和测试程序到树莓派上。

    git clone https://github.com/TomWhitwell/SlowMovie/
    cd SlowMovie/e-paper/RaspberryPi&JetsonNano/python
    sudo python setup.py install

    如果一切正常的话,运行下面的代码示例,墨水屏会显示当前时间。

    python examples/epd_7in5_V2_test.py

    小试牛刀

    上面的步骤都测试通过之后,就可以小试牛刀了。进入 SlowMovie 目录。

    cd ~/SlowMovie

    我所用的超慢电影播放器用了 ffmpeg-python、PIL 库。
    首先需要在树莓派上安装 FFmpeg,参考官网 https://ffmpeg.org/
    然后安装 Python 库。

    sudo apt-get install ffmpeg-python
    sudo apt-get install python-pil python3-pil

    运行 helloworld 查看效果。

    python helloworld.py
    

    这个脚本会随机选择一个 mp4 文件,随机提取一帧、调整大小并处理抖动,最后展现在屏幕上。以下是部分关键代码:

    # Use ffmpeg to extract a single frame from the .mp4 file, resize it, letterbox it and save it locally
    def generate_frame(in_filename, out_filename, time, width, height):    
        (
            ffmpeg
            .input(in_filename, ss=time)
            .filter('scale', width, height, force_original_aspect_ratio=1)
            .filter('pad', width, height, -1, -1)
            .output(out_filename, vframes=1)              
            .overwrite_output()
            .run(capture_stdout=True, capture_stderr=True)
        )
    # Import, initialise and clear the display
    from waveshare_epd import epd7in5_V2
    epd = epd7in5_V2.EPD()
    epd.init()
    epd.Clear()
    # Check how many frames are in the movie
    frameCount = int(ffmpeg.probe(inputVid)[‘streams’][0][‘nb_frames’])
    # Pick a random frame
    frame = random.randint(0,frameCount)
    # Convert that frame count to Timecode used by ffmpeg
    msTimecode = “%dms”%(frame*41.666666)
    # Open the saved frame in PIL
    pil_im = Image.open(“grab.jpg”)
    # Convert the image to a 1 bit bitmap (Just zeros and ones)
    # using Floyd Steinberg dithering
    pil_im = pil_im.convert(mode=’1',dither=Image.FLOYDSTEINBERG)
    # display the image
    epd.display(epd.getbuffer(pil_im))

    超慢速电影播放器

    如果上面的步骤都正常工作,那么你可以通过 SFTP 传输更多视频文件到 SlowMovie/Video 目录。
    运行下面的脚本查看效果。

    python slowmovie.py

    还有更多参数可以使用,例如

    python slowmovie.py -h

    将保存播放进度,以便在下次启动时继续播放。

    python slowmovie.py -f 2001.mp4 -d 150 -i 1

    将播放 2001.mp4 文件,并以每 150 秒更新一帧画面。也就是每小时播放 24 帧。

    最后来设置开机运行。

    sudo nano /etc/profile

    添加下面两行:

    cd SlowMovie
    sudo python slowmovie.py

    按下 Ctrl+O 保存,按下 Ctrl+X 退出。
    完成之后,下次重启的时候就可以直接进入播放状态了。

    所用到的代码文件请在项目文件库中下载:
    https://make.quwj.com/project/339

    计划,以此为基础,设计一个每3秒刷新一帧的电影播放机。

     
    人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。
  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14220929.html
Copyright © 2011-2022 走看看