メモリバッファにx264ビデオ(またはシングルフレーム)を書き込む際に問題があります。画像のopencvでは、imencodeとimdecodeはこの作業を行います。しかし、私は低メモリ使用量とインターネットで送信するためのx264ビデオフレームを保存したい。私はjpegでできますが、jpegサイズはx264ビデオフレームと品質よりもずっと悪くなります。私は検索したが、バッファにビデオフレームを書き込む方法が見つからない。ここで Python-Opencvメモリバッファにx264ビデオを書き込む
は残念ながら import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cap.set(3,320)
cap.set(4,240)
cap.set(5,30)
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'x264')
out = cv2.VideoWriter('.....sample.avi',fourcc, 30.0, (320,240))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
cv2.imshow('frame',frame)
out.write(frame) #I want to write memory not disk
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
あなたは何を達成しようとしているのか分かりませんので少し詳しく説明できますか?イメージフレームを含むビデオファイルを作成しますか?または、他の何か?いずれにしても、AVIコンテナでx264がうまく動作しているかどうかわからない、代わりにMKVを試してみよう。 –
実際には、udpまたはtcp/ipでネット上でカメラフレームを送信しようとしている。私はjpgイメージを正常に送信しました(1つのフレームが次のフレームを送信して送信します)。しかし、私はx264の圧縮mkvまたはaviビデオ(または1つのフレームを順番に)ファイルをjpgよりも効率的に圧縮するので、(私は思うより良い品質)x264をディスクに書き込むことができるが、私はメモリに書き込みたい配列..)x264のビデオフレーム私は(pickleまたはjson)ビデオフレームをシリアル化し、ソケットを介して送信する必要があります。私はネット上で検索したが、どうすればいいの?この説明ははっきりとしていると思います。これは私の問題です。 – faxcon
OpenCVのpythonバージョンは単にピクルス、シリアライズ可能な行列にnumpyを使用しているので、これは可能ですか?OpenCV(C++とPythonの両方)はFFMPEG(libav)を使用します。同じように働くことはできません。コンテンツをストリーミングする前にコンテンツを修正する予定ですか?私。 OpenCVを実際に必要としているのですか、またはコンテンツを直接ストリーミングするために別のライブラリを使用することは可能でしょうか? –