2025年5月17日 星期六

Streamlit 學習筆記 : 展示多媒體資料 (三) 視訊

本篇繼續來測試用 Streamlit 顯示多媒體資料的視訊 (影片) 部分. 

Streamlit 用來顯示多媒體內容的函式摘要如下表 :


 多媒體 函式 可用媒體格式 可用資料來源
圖片st.image()PNG, JPG本機路徑, URL, PIL.Imagenumpy 陣列
音訊st.audio()MP3, WAV, OGG本機檔案, URL, BytesIO
影片st.video()MP4, WebM本機檔案, URL, BytesIO


以下測試使用 Streamlit 的 video() 函式來播放音訊. 


3. 播放影片 : 

Sreamlit 播放音訊的 video() 函式參數結構如下 : 

st.video(data, format="video/mp4", start_time=0)  

第一參數 data 為要播放之視訊來源, 支援 mp4, WebM 等影片格式, 來源可以是本機影片檔, 或網路影片的 URL, 也可以是用 open() 開啟後讀取的 Bytes 型別的二進位資料或用 Numpy 產生的 ndarray 音訊物件. 

第二參數 format 用來設定音訊的 MIME 類型, 以便瀏覽器能正確解析格式與正常播放音訊. 不指定 format 參數時, Streamlit 會依據檔案內容或副檔名自動判斷 MIME 格式, 但若出現播放異常或無聲現象, 可嘗試明確指定 format 參數. 各種音訊格式的 format 參數如下表 : 


 影片格式  format 參數值
 MP4  "video/mp4"
 WebM  "video/webm"
 Ogg  "video/ogg"


第三參數 start_time 用來設定播放器的起始時間, 預設是 0 (從頭開始播放). 

首先來測試播放本機的視訊檔, 我在目前工作目錄下準備了一個 cat.mp4 檔, 只要將檔名路徑傳給 st.video() 即可, 例如 : 


測試 3-1 : 播放本機 mp4 檔 [看原始碼] 

# st-video-test-1.py
import streamlit as st

st.subheader('播放本機 mp4 檔案')
st.video('cat.mp4', format='video/mp4')

結果如下 : 




按右下角的三個小點可以選擇下載視訊檔, 調整播放速度等操作 : 




視訊來源也可以是網路上的影片, 只要將影片網址傳給 st.video() 即可, 例如下面的影片 : 



測試 3-2 : 播放網路 mp4 檔 [看原始碼] 

# st-video-test-2.py
import streamlit as st

st.subheader('播放網路 mp4 檔案')
mp4_url='https://yaohuang1966.github.io/media/remind.mp4'
st.video(mp4_url, format='video/mp4')

結果如下 :




st.audio() 也可以播放影片的二進位資料 (Bytes 類型), 用 open() 開啟影片檔, 將讀取後得到的 Bytes 類型資料傳給 st.video() 即可, 例如 :


測試 3-3 : 播放 Bytes 類型視訊 [看原始碼]

# st-video-test-3.py
import streamlit as st

st.subheader('播放 Bytes 類型視訊')
with open('cat.mp4', 'rb') as f:
    video_bytes=f.read()
st.video(video_bytes, format='video/mp4')

結果如下 :




注意, st.video() 與 st.audio() 一樣都只能傳入單一個資料來源, 不支援傳入放在串列中的多個音訊或視訊, 不管是本機檔案, 網址 URL, 或 Bytes 類型的音訊或視訊都不可以, 如果傳入陣列會出現 "RuntimeError: Invalid binary data format' 例外. 

沒有留言 :