本篇繼續來測試用 Streamlit 顯示多媒體資料的視訊 (影片) 部分.
本系列之前的文章參考 :
Streamlit 用來顯示多媒體內容的函式摘要如下表 :
| 多媒體 | 函式 | 可用媒體格式 | 可用資料來源 |
|---|---|---|---|
| 圖片 | st.image() | PNG, JPG | 本機路徑, URL, PIL.Image, numpy 陣列 |
| 音訊 | 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-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' 例外.




沒有留言 :
張貼留言