Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單視頻處理實戰(zhàn)案例 之五 簡單指定視頻某片段重復(fù)播放效果
目錄
Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單視頻處理實戰(zhàn)案例 之五 簡單指定視頻某片段重復(fù)播放效果
一、簡單介紹
二、簡單指定視頻某片段重復(fù)播放效果實現(xiàn)原理
三、簡單指定視頻某片段重復(fù)播放效果案例實現(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)行視覺圖像處理,......
二、簡單指定視頻某片段重復(fù)播放效果實現(xiàn)原理
要在 Python 中使用 OpenCV 指定視頻某段連續(xù)幀,然后重復(fù)播放若干次。當(dāng)指定的起始幀和結(jié)束幀超出視頻的有效范圍時,我們需要進(jìn)行安全校驗,以防止越界訪問。
并將重復(fù)的視頻片段插入原始視頻中,分別處理重復(fù)片段之前和之后的部分,然后再將它們組合起來。
實現(xiàn)原理:
- 讀取原始視頻文件。
- 分別處理重復(fù)片段之前、重復(fù)片段和重復(fù)片段之后的部分。
- 將這些部分按順序合并成新的視頻。
具體方法:
- 使用 OpenCV 中的
cv2.VideoCapture()
函數(shù)讀取原始視頻文件。- 獲取原始視頻的幀率、總幀數(shù)和尺寸等信息。
- 對指定的重復(fù)片段之前、重復(fù)片段和重復(fù)片段之后的部分進(jìn)行逐幀處理。
- 利用
cv2.VideoWriter()
創(chuàng)建輸出視頻文件對象,并按照順序?qū)⑻幚砗玫囊曨l幀寫入其中。
實現(xiàn)中涉及了以下關(guān)鍵函數(shù):
cv2.VideoCapture()
:用于從視頻文件中讀取視頻幀的函數(shù)。它創(chuàng)建了一個視頻捕獲對象,可以用來逐幀讀取視頻內(nèi)容。
cv2.VideoWriter()
:用于創(chuàng)建視頻寫入對象的函數(shù)。它創(chuàng)建了一個視頻寫入對象,可以用來將視頻幀寫入到輸出視頻文件中。
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index)
:用于設(shè)置視頻文件讀取的起始幀。這個函數(shù)可以將視頻文件的讀取位置設(shè)置為指定的幀序號。
cap.get(cv2.CAP_PROP_FPS)
:用于獲取視頻幀率的函數(shù)。它返回視頻文件中的幀率信息,以便在創(chuàng)建輸出視頻對象時保持一致。
cap.get(cv2.CAP_PROP_FRAME_COUNT)
:用于獲取視頻總幀數(shù)的函數(shù)。它返回視頻文件中的總幀數(shù)信息,以便在處理視頻片段時進(jìn)行判斷。
cap.read()
:用于逐幀讀取視頻內(nèi)容的函數(shù)。它返回一個布爾值和一個視頻幀,布爾值表示是否成功讀取了視頻幀,視頻幀則是一個 NumPy 數(shù)組,表示當(dāng)前讀取的視頻幀內(nèi)容。
out.write(frame)
:用于將視頻幀寫入輸出視頻文件的函數(shù)。它將指定的視頻幀寫入到輸出視頻對象中。
cap.release()
和out.release()
:分別用于釋放視頻捕獲對象和視頻寫入對象的函數(shù)。它們釋放了底層的資源,確保在程序結(jié)束時資源得到正確釋放。
通過這些關(guān)鍵函數(shù)的組合和調(diào)用,實現(xiàn)了從原始視頻中提取指定片段、重復(fù)播放指定次數(shù),并生成新的視頻文件的功能。
三、簡單指定視頻某片段重復(fù)播放效果案例實現(xiàn)簡單步驟
1、編寫代碼
2、運(yùn)行效果
文章來源:http://www.zghlxwxcb.cn/news/detail-849269.html
3、具體代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-849269.html
"""
簡單指定視頻某片段重復(fù)播放效果
1、使用 OpenCV 中的 cv2.VideoCapture() 函數(shù)讀取原始視頻文件。
2、獲取原始視頻的幀率、總幀數(shù)和尺寸等信息。
3、對指定的重復(fù)片段之前、重復(fù)片段和重復(fù)片段之后的部分進(jìn)行逐幀處理。
4、利用 cv2.VideoWriter() 創(chuàng)建輸出視頻文件對象,并按照順序?qū)⑻幚砗玫囊曨l幀寫入其中。
"""
import cv2
def repeat_video_segment(input_video_path, output_video_path, start_frame, end_frame, repeat_count):
"""
指定視頻片段重復(fù)若干次
:param input_video_path:
:param output_video_path:
:param start_frame:
:param end_frame:
:param repeat_count:
:return:
"""
# 讀取原始視頻文件
cap = cv2.VideoCapture(input_video_path)
# 獲取原始視頻的幀率和總幀數(shù)
fps = cap.get(cv2.CAP_PROP_FPS)
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# 校驗起始幀和結(jié)束幀是否有效
if start_frame < 0 or end_frame < 0 or start_frame >= total_frames or end_frame >= total_frames:
print("Error: Invalid start or end frame.")
return
# 獲取原始視頻的寬度和高度
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)建輸出視頻文件對象
out = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))
# 設(shè)置視頻文件讀取的起始幀
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
# 寫入重復(fù)片段之前的部分
for frame_index in range(start_frame):
ret, frame = cap.read()
if ret:
out.write(frame)
else:
break
# 寫入重復(fù)片段
for _ in range(repeat_count):
# 設(shè)置視頻文件讀取的起始幀為重復(fù)片段的起始幀
cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame)
# 逐幀讀取重復(fù)片段并寫入輸出視頻對象
for frame_index in range(start_frame, end_frame + 1):
ret, frame = cap.read()
if ret:
out.write(frame)
else:
break
# 寫入重復(fù)片段之后的部分
for frame_index in range(end_frame + 1, total_frames):
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index)
ret, frame = cap.read()
if ret:
out.write(frame)
else:
break
# 釋放資源
cap.release()
out.release()
cv2.destroyAllWindows()
def main():
# 調(diào)用函數(shù)并指定輸入和輸出視頻文件路徑,以及要重復(fù)播放的視頻段的起始幀和結(jié)束幀,以及重復(fù)播放的次數(shù)
input_video_path = "Videos/CatRun.mp4"
output_video_path = "Videos/VideoRepeatSegment.mp4"
start_frame = 130 # 重復(fù)片段的起始幀
end_frame = 200 # 重復(fù)片段的結(jié)束幀
repeat_count = 3 # 重復(fù)播放的次數(shù)
repeat_video_segment(input_video_path, output_video_path, start_frame, end_frame, repeat_count)
if __name__ == "__main__":
main()
四、注意事項
- 校驗起始幀和結(jié)束幀是否有效,確保不會越界。
- 在處理視頻片段之前和之后,需要設(shè)置視頻文件讀取的起始幀。
- 在循環(huán)讀取視頻幀時,需要判斷視頻文件是否讀取到了末尾。
- 最后需要釋放資源,包括釋放視頻文件對象和關(guān)閉所有窗口。
到了這里,關(guān)于Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單視頻處理實戰(zhàn)案例 之五 簡單指定視頻某片段重復(fù)播放效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!