本次视频录制测试,使用板载的摄像头进行视频录制,使用板载的按键进行视频录制的开始和停止。
from media.mp4format import *
import os
import utime
from machine import Pin
from machine import FPIOA
width = 800
height = 480
file_name = "/data/record.mp4"
MAX_RECORD_TIME = 10
fpioa = FPIOA()
fpioa.set_function(21, FPIOA.GPIO21)
KEY = Pin(21, Pin.IN, Pin.PULL_UP)
def mp4_muxer_test():
print("等待按键按下开始录制...")
while KEY.value() == 1:
utime.sleep_ms(50)
print("按键按下,开始录制")
mp4_muxer = Mp4Container()
mp4_cfg = Mp4CfgStr(mp4_muxer.MP4_CONFIG_TYPE_MUXER)
if mp4_cfg.type == mp4_muxer.MP4_CONFIG_TYPE_MUXER:
mp4_cfg.SetMuxerCfg(file_name, mp4_muxer.MP4_CODEC_ID_H265, width, height, mp4_muxer.MP4_CODEC_ID_G711U)
mp4_muxer.Create(mp4_cfg)
mp4_muxer.Start()
start_time_ms = utime.ticks_ms()
frame_count = 0
recording = True
try:
while recording:
os.exitpoint()
mp4_muxer.Process()
frame_count += 1
if frame_count % 10 == 0:
print(f"帧数: {frame_count}")
if KEY.value() == 1:
print("按键松开,停止录制")
recording = False
elapsed_time = utime.ticks_ms() - start_time_ms
if elapsed_time >= MAX_RECORD_TIME * 1000:
print("达到最大录制时间")
recording = False
utime.sleep_ms(10)
except BaseException as e:
print("录制出错:", e)
mp4_muxer.Stop()
mp4_muxer.Destroy()
print(f"录制完成,保存视频: {file_name}")
print(f"总帧数: {frame_count}, 时长: {elapsed_time//1000}秒")
if __name__ == "__main__":
os.exitpoint(os.EXITPOINT_ENABLE)
while True:
mp4_muxer_test()
print("等待5秒后可再次录制...")
utime.sleep(5)
效果,按下按键开始录制,停止后停止录制,录制完成后保存。

查看data路径下的文件,如下所示,视频录制成功:

|