Reputation: 5
I'm quite a newbie when it comes to ffmpeg and av, I was trying to do a simple encode - decode example but the encode result always returns an empty list. I don't understand the reason for this, I don't know how it can be solved.
import av
import numpy as np
import cv2
container = av.open(file = "video=PC Camera",format = "dshow",options = {"video_size":"640x480"},mode = "r")
def getFrame():
# open camera
for frame in container.decode(video=0):
yield frame
def encode(frame):
encoder = av.CodecContext.create('h264', 'w')
encoder.width = frame.width
encoder.height = frame.height
encoder.pix_fmt = frame.format.name
encoder.bit_rate = 5000000
encoder.framerate = 30
encoder.open()
frames = encoder.encode(frame)
encoder.close()
return frames
if __name__ == "__main__":
while 1:
frame = next(getFrame())
frame_encoded = encode(frame)
print(frame_encoded) // always empty
if len(frame_encoded) == 0:
continue
#cv2.imshow("frame",frame.to_ndarray(format = "bgr24"))
#cv2.waitKey(1)
Upvotes: 0
Views: 205