我正在閱讀來自 YouTube 的視頻(出于測驗目的。真實案例將來自攝像機提要)并獲取每一幀并在其上注入徽標并使用這些幀創建另一個視頻。此外,我還需要將這些幀保存為影像(這已經對我有用)。我嘗試了以下,
img = cv2.imread('logo.png')
img_height, img_width, _ = img.shape
url = "https://www.youtube.com/watch?v=vDHtypVwbHQ"
video = pafy.new(url)
best = video.getbest(preftype="mp4")
frame_no = 1
width = 1280
hieght = 720
fps = 30
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
videoW = cv2.VideoWriter('image_to_video.mp4', fourcc, float(fps), (width, hieght))
while True:
_, frame = video.read()
frame[y:y img_height , x:x img_width ] = img
videoW.write(frame)
frame_no = 1
這會寫入一個視頻,但它說視頻已損壞或擴展名不正確。使用 OpenCV 在 Python 中將這些幀寫入新視頻的最佳方法是什么?
uj5u.com熱心網友回復:
實作中有很多不合邏輯的東西,例如“視頻”是沒有讀取方法的pafy.Stream。
你應該做的是使用Stream url和VideoCapture來獲取幀,復制標志的像素,并用VideoWriter撰寫它。
import cv2
import pafy
def apply_logo(url, logo, filename):
video = pafy.new(url)
best = video.getbest(preftype="mp4")
reader = cv2.VideoCapture(best.url)
if not reader.isOpened():
return False
fourcc = cv2.VideoWriter_fourcc(*"MP4V")
writer = cv2.VideoWriter(filename, fourcc, 60.0, best.dimensions)
logo_width, logo_height = [min(x, y) for x, y in zip(best.dimensions, logo.shape)]
i = 0
while True:
ret, frame = reader.read()
if ret:
frame[:logo_width, :logo_height] = logo[:logo_width, :logo_height]
writer.write(frame)
i = 1
print(i)
else:
break
reader.release()
writer.release()
return True
url = "https://www.youtube.com/watch?v=vDHtypVwbHQ"
logo = cv2.imread("logo.png")
apply_logo(url, logo, "output.mp4")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/338186.html
下一篇:如何在openCV上獲得與leptonica的pixReduceRankBinary2和pixCloseBrick相同的結果?
