Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單視頻處理實戰(zhàn)案例 之六 簡單指定視頻某片段慢放效果
目錄
Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單視頻處理實戰(zhàn)案例 之六 簡單指定視頻某片段慢放效果
一、簡單介紹
二、簡單指定視頻某片段慢放效果實現(xiàn)原理
三、簡單指定視頻某片段慢放效果案例實現(xiàn)簡單步驟
四、注意事項
一、簡單介紹
Python是一種跨平臺的計算機(jī)程序設(shè)計語言。是一種面向?qū)ο蟮膭討B(tài)類型語言,最初被設(shè)計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用于獨立的、大型項目的開發(fā)。Python是一種解釋型腳本語言,可以應(yīng)用于以下領(lǐng)域: Web 和 Internet開發(fā)、科學(xué)計算和統(tǒng)計、人工智能、教育、桌面界面開發(fā)、軟件開發(fā)、后端開發(fā)、網(wǎng)絡(luò)爬蟲。
這里使用 Python? 基于 OpenCV 進(jìn)行視覺圖像處理,......
二、簡單指定視頻某片段慢放效果實現(xiàn)原理
視頻慢放效果是指將視頻的播放速度減慢,使視頻中的動作變得更加緩慢和流暢。在視頻慢放過程中,每一幀圖像的持續(xù)時間延長,導(dǎo)致視頻中的動作看起來放慢了。這種效果常用于突出視頻中的細(xì)節(jié)或動作,或者用于藝術(shù)創(chuàng)作中,增加視頻的觀賞性。通過視頻慢放效果,觀眾可以更加仔細(xì)地觀察視頻中的內(nèi)容,感受到其中的細(xì)微變化和動態(tài)。
實現(xiàn)原理:
是將指定幀范圍內(nèi)的幀重復(fù)寫入輸出視頻,以延長這些幀的顯示時間,從而實現(xiàn)慢放的效果。
實現(xiàn)方法:
- 打開輸入視頻文件并獲取其相關(guān)信息,如幀率、總幀數(shù)、寬度和高度。
- 校驗輸入?yún)?shù)的合法性,包括起始幀和結(jié)束幀是否在有效范圍內(nèi),以及慢放速度是否大于 0。
- 逐幀讀取輸入視頻,根據(jù)指定的幀范圍和慢放速度,將指定范圍內(nèi)的幀重復(fù)寫入輸出視頻,并根據(jù)慢放速度控制寫入次數(shù)。
- 寫入未指定范圍內(nèi)的幀時,直接將其寫入輸出視頻。
- 釋放資源,關(guān)閉視頻文件。
涉及的關(guān)鍵函數(shù):
-
cv2.VideoCapture():
- 用途:打開視頻文件。
- 參數(shù):視頻文件路徑。
- 返回值:VideoCapture 對象,用于操作視頻文件。
-
cv2.VideoWriter():
- 用途:創(chuàng)建視頻寫入對象。
- 參數(shù):
- 輸出視頻文件路徑。
- 視頻編碼器(如 FourCC)。
- 幀率。
- 視頻尺寸。
- 返回值:VideoWriter 對象,用于寫入視頻幀。
-
cv2.VideoCapture.get():
- 用途:獲取視頻的各種屬性,如幀率、總幀數(shù)、寬度和高度。
- 參數(shù):屬性標(biāo)識符。
- 返回值:屬性值。
-
cv2.VideoWriter.write():
- 用途:向視頻中寫入一幀圖像。
- 參數(shù):要寫入的視頻幀。
- 返回值:無。
-
cv2.VideoCapture.read():
- 用途:從視頻中讀取一幀圖像。
- 參數(shù):無。
- 返回值:布爾值(表示是否成功讀取)、視頻幀。
-
cv2.VideoCapture.set():
- 用途:設(shè)置視頻的各種屬性,如幀索引。
- 參數(shù):屬性標(biāo)識符、屬性值。
- 返回值:布爾值(表示設(shè)置是否成功)。
這些函數(shù)在實現(xiàn)視頻慢放效果的過程中扮演了重要角色,用于讀取視頻、寫入視頻,并對視頻的屬性進(jìn)行操作。通過這些函數(shù),可以對視頻進(jìn)行有效的處理和控制,實現(xiàn)慢放效果。
三、簡單指定視頻某片段慢放效果案例實現(xiàn)簡單步驟
1、編寫代碼
2、運(yùn)行效果
文章來源:http://www.zghlxwxcb.cn/news/detail-851186.html
3、具體函數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-851186.html
"""
簡單指定視頻某片段慢放效果
1、打開輸入視頻文件并獲取其相關(guān)信息,如幀率、總幀數(shù)、寬度和高度。
2、校驗輸入?yún)?shù)的合法性,包括起始幀和結(jié)束幀是否在有效范圍內(nèi),以及慢放速度是否大于 0。
3、逐幀讀取輸入視頻,根據(jù)指定的幀范圍和慢放速度,將指定范圍內(nèi)的幀重復(fù)寫入輸出視頻,并根據(jù)慢放速度控制寫入次數(shù)。
4、寫入未指定范圍內(nèi)的幀時,直接將其寫入輸出視頻。
5、釋放資源,關(guān)閉視頻文件。
"""
import cv2
def slow_motion(input_video_path, output_video_path, start_frame, end_frame, slow_down_factor):
"""
指定視頻指定幀段,進(jìn)行慢放處理
:param input_video_path:
:param output_video_path:
:param start_frame:
:param end_frame:
:param slow_down_factor:慢放因子,越大越慢
:return:
"""
# 打開視頻文件
cap = cv2.VideoCapture(input_video_path)
# 檢查視頻文件是否成功打開
if not cap.isOpened():
print("Error: Unable to open video file.")
return
# 獲取視頻幀率和總幀數(shù)
fps = cap.get(cv2.CAP_PROP_FPS)
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# 獲取視頻的寬度和高度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 定義視頻編碼器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
# 創(chuàng)建 VideoWriter 對象
out = cv2.VideoWriter(output_video_path, fourcc, fps / slow_down_factor, (width, height))
# 校驗起始幀和結(jié)束幀是否合法
if start_frame < 0 or end_frame >= total_frames or start_frame > end_frame:
print("Error: Invalid start frame or end frame.")
return
# 校驗慢放速度是否合法
if slow_down_factor <= 0:
print("Error: Slow down factor must be greater than 0.")
return
# 逐幀讀取視頻并添加慢放效果
for frame_index in range(total_frames):
ret, frame = cap.read()
if ret:
# 檢查當(dāng)前幀是否在指定的幀范圍內(nèi)
if start_frame <= frame_index <= end_frame:
# 寫入當(dāng)前幀多次,模擬慢放效果
for _ in range(slow_down_factor):
out.write(frame)
else:
out.write(frame)
else:
break
# 釋放資源
cap.release()
out.release()
cv2.destroyAllWindows()
def main():
# 調(diào)用函數(shù)并指定輸入和輸出視頻文件路徑、幀范圍和慢放速度
input_video_path = "Videos/CatRun.mp4"
output_video_path = "Videos/VideoSlowMotionEffect.mp4"
start_frame = 150 # 起始幀
end_frame = 160 # 結(jié)束幀
slow_down_factor = 3 # 慢放速度
slow_motion(input_video_path, output_video_path, start_frame, end_frame, slow_down_factor)
if __name__ == "__main__":
main()
四、注意事項
- 起始幀和結(jié)束幀必須在合法范圍內(nèi),且起始幀不能超過結(jié)束幀。
- 慢放速度必須大于 0。
- 逐幀讀取視頻時,需要檢查當(dāng)前幀是否在指定的幀范圍內(nèi),以確定是否需要進(jìn)行慢放處理。
- 寫入輸出視頻時,需要根據(jù)慢放速度控制寫入次數(shù),實現(xiàn)慢放效果。
- 確保釋放資源,關(guān)閉視頻文件,避免資源泄露。
到了這里,關(guān)于Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單視頻處理實戰(zhàn)案例 之六 簡單指定視頻某片段慢放效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!