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秒刷新一帧的电影播放机。

     
    人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。
  • 相关阅读:
    Windows的全新文件系统:ReFS
    Eclipse Virgo 3.0发布了
    Web Sites and a Plugin Free Web
    PhoneGap现已完全支持WP7
    深入探索PowerPivot客户端和服务器端架构
    Funf,一个传感和数据处理的移动框架
    利用Contained Database和DAC来开发基于SQL Server "Denali"和SQL Azure之上的应用程序
    一个漂亮的HTML5后台管理界面模板
    笔试题收集
    笔试面试的准备工作
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14220929.html
Copyright © 2011-2022 走看看