小的有机发光二极管(OLED)显示器通常用于嵌入式设备中。这是因为OLED的成本通常与角色LCD相同,但具有更好的用户界面(UI)和用户体验(UX)。
通常,嵌入式OLED屏幕用于显示文本消息,但是视频呢?例如,是否可以在小0.96英寸OLED上播放视频?
对于OLED来说,这是没有问题的,它的显示器几乎没有限制。这里的挑战在于微控制器。微控制器设计用于不包括视频处理的简单任务。因此,在0.96英寸OLED上显示一个小型视频剪辑需要交易的技巧。
需要明确的是,微控制器无法编程以处理视频格式。但是,可以从视频剪辑中提取足够的帧并将这些帧转换为可执行的代码。当以序列显示帧时,它将看起来像是通过微控制器运行的同一视频剪辑。
对于这个项目,我们将在单色SSD1306 OLED上准备并播放视频剪辑。
选择您的微控制器
重要的是要注意,并非所有的微控制器都可以完成从视频剪辑中显示选择性帧的任务 - 即使这些框架的长度仅一秒或两个。
例如,Arduino板上的最大闪存通常为256 kb。这不足以存储五个或更多视频帧的代码,即尺寸为128×64。因此,对于这个项目,我们需要一个具有较大闪存的微控制器。
ESP32是一种适合视频播放的选项,因为它的内存范围为4至16 MB,足以存储多个帧的代码。为了确保可靠性,我们将在36帧中长达12秒的视频剪辑修剪一下,以便ESP32可以轻松地播放框架。
接口SSD1306 OLEDwith ESP32
首先,有必要将OLED与我们的微控制器接口。在这里,我们使用的是单色0.96英寸SSD1306 OLED和ESP32。一个7针OLED模块通过SPI接口与ESP32连接。
SSD1306 OLED和ESP32具有以下电路连接…
与ESP32连接的SSD1306 OLED具有此电路图:
视频剪辑
您可以使用几秒钟的任何视频剪辑。在这个项目中,我们选择了大约12秒的长度。该夹的分辨率为1920×1080,帧速率为30 fps。
准备视频
视频剪辑是RGB视频,但我们将在单色OLED上播放,这意味着它必须是灰度。使用在线视频编辑器将剪辑转换为灰度视频很容易。我们用了MoviemakerOnline。
If you use the same tool, simply navigate to moviemakeronline.com and the upload target video file by clicking the “Add File” icon.
上传文件后,单击“效果”按钮。
接下来,单击“添加效果”按钮。
从效果中选择“阈值”选项。
单击“制作视频”按钮,然后等待视频完成处理。
处理视频后,单击“观看电影”图标。
当Grayscale-D视频播放时,右键单击并选择“将视频保存为…”
请确保以不同的名称保存灰度视频。
新的灰度视频仍将显示1920×1080的分辨率和30 fps的帧速率。
灰度视频看起来像这样…
修剪视频到大小
我们的OLED显示屏的分辨率为128×64,与视频的框架尺寸不符。因此,我们必须修剪灰度视频的分辨率,以确保框架拟合在OLED显示屏中以进行正确的观看。还必须降低帧速率。
To do, use a professional video editor. We use the VLC media player, which is a free and open-source cross-platform multimedia player. It can be downloaded for Microsoft Windows, macOS, and Linux.
打开VLC媒体播放器并导航到媒体 - >转换/保存。
在弹出窗口中,单击“添加”。
接下来,选择目标灰度视频,然后单击“转换/保存”按钮。
在下一个窗口中,单击“创建新配置文件”按钮。
接下来,在“封装”下选择“ AVI”选项卡。
现在,将编解码器更改为“ MPEG-4”,并将帧速率设置为“视频编解码器”的“编码参数”选项卡下的5 fps。
Ensure the scale is set to “2” as the SSD1306 has a resolution ratio of 2:1 (128:64). Also, set the frame size width to 128 and the height to 64 under the “Resolution” tab of the “Video Codec.”
接下来,将配置文件名称设置为SSD1306。
单击“创建”按钮,您将返回转换窗口。在转换窗口中,选择“ SSD1306”配置文件,然后浏览以保存转换后的视频。
Click on the “Start” to finish the conversion.
现在,我们有一个灰度视频,分辨率为128×64,帧速率降低到5 fps。
[链接到样品video-bwc]
提取框架
接下来,我们必须从5-FPS灰度视频中提取帧。您需要为此使用专业的视频编辑器,例如VLC媒体播放器。
将VLC媒体播放器作为管理员运行。
单击“显示设置”下的“全部”单选按钮。
导航到视频 - >过滤器。
Select the “Scene Filter” and set the image format to “jpg,” the filename prefix to “Frame,” and the recording ratio to “5.” Select a destination path to save the extracted frames by browsing the “Directory Path Prefix.” Then, click on “Save.”
Once again, open “Preferences” and choose the “Scene Video Filter” option by navigating to Video->Filters. Be sure to click “Save.”
关闭VLC媒体播放器并重新运行管理员。打开并播放5-FPS灰度视频。视频帧将在“目录路径前缀”下的文件夹集中提取。
转换框架
Select the grayscale frames from the original video with a resolution 128×64 (the resolution of our OLED). Next, it’s necessary to convert the frames into a binary format. To do so, we must first convert the frames into C arrays using any online/offline image converter.
我们使用LGVL,可用here。
理想的是,可以同时将所有帧上传到此在线转换器。
上传框架,然后将颜色格式选择为“ CF_INDEXED_1_BIT”。然后,单击“转换”按钮。
In return, we’ll receive the .c files containing a C array for each frame. We’ll only copy the 64 x 16 hexadecimal array from each file.
图书馆
安装必要的库,Arduino我开放DE and install Adafruit_GFX.h and Adafruit_SSD1306.h by navigating to Tools->Manage Libraries. We use ESP32-Dev-kit-V1 for this project, so “DOIT ESP32 DEVKIT V1” is selected by navigating to Tools->Board->ESP32.
The port is selected by navigating to Tools->Port.
The code
草图是从导入Spi.H,Wire.H,Adafruit_gfx.h和Adafruit_ssd1306.h开始的。这些库是SSD1306 OLED所需的。将变量定义为存储OLED的宽度和高度。该变量还定义为OLED的电路连接,以与ESP32一起使用。
实例化了ADAFRUIT_SSD1306类的对象“显示”。每个帧的C阵列存储在Progmem中,如下所示。
在另一个数组中列举了所有帧的C数组:EPD_BITMAP_ALLARRARAY []。
在设置函数中,通过调用display.begin(ssd1306_switchcapvcc)方法来启动SSD1306 OLED。
在loop()函数中,运行一个“ for loop”以清除显示屏,显示每个帧的位图数组,并提供200 ms的延迟。所有视频框架都会播放,因为“ For Loop”完成了通过EPD_BITMAP_ALLARRARAY []数组导航。最后,延迟一秒钟,以便在播放中停下来。
结果
你可能也会喜欢:
提交以下:精选贡献,,,,354manbetx
与本文有关的问题?
询问并讨论Electro-Tech-online.comandedaboard.com论坛。
Tell Us What You Think!!
你一定是登录to post a comment.