极客范|自制墨水屏相框:一年时间只放一部电影


_本文原题:自制墨水屏相框:一年时间只放一部电影
作者:Tom Whitwell
来源/译者:趣无尽

极客范|自制墨水屏相框:一年时间只放一部电影
本文插图
制造一台这样的黑白相框 , 用一年的时间来放一部老电影 , 每天的咖啡都能品出不同的灵感 。
它用到了树莓派、电子墨水屏和宜家相框 , 以及 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
点击视频号看
大神制作《环太平洋》危险流浪者号模型