Je suis un peu en retard, mais mon puissant VidGear
La bibliothèque Python automatise le processus de canalisation des cadres OpenCV dans FFmpeg sur n'importe quelle plate-forme . Voici un exemple de base en python :
# import libraries
from vidgear.gears import WriteGear
import cv2
output_params = {"-vcodec":"libx264", "-crf": 0, "-preset": "fast"} #define (Codec,CRF,preset) FFmpeg tweak parameters for writer
stream = cv2.VideoCapture(0) #Open live webcam video stream on first index(i.e. 0) device
writer = WriteGear(output_filename = 'Output.mp4', compression_mode = True, logging = True, **output_params) #Define writer with output filename 'Output.mp4'
# infinite loop
while True:
(grabbed, frame) = stream.read()
# read frames
# check if frame empty
if not is grabbed:
#if True break the infinite loop
break
# {do something with frame here}
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# write a modified frame to writer
writer.write(gray)
# Show output window
cv2.imshow("Output Frame", frame)
key = cv2.waitKey(1) & 0xFF
# check for 'q' key-press
if key == ord("q"):
#if 'q' key-pressed break out
break
cv2.destroyAllWindows()
# close output window
stream.release()
# safely close video stream
writer.close()
# safely close writer
Source :https://abhitronix.github.io/vidgear/latest/gears/writegear/compression/usage/#using-compression-mode-with-opencv
Vous pouvez consulter VidGear Docs pour des applications et fonctionnalités plus avancées.
J'espère que ça aide !
Il m'a fallu beaucoup de bricolage, mais j'ai compris en utilisant le démultiplexeur FFmpeg rawvideo :
python capture.py | ffmpeg -f rawvideo -pixel_format bgr24 -video_size 640x480 -framerate 30 -i - foo.avi
Puisqu'il n'y a pas d'en-tête dans la vidéo brute spécifiant les paramètres vidéo supposés, l'utilisateur doit les spécifier afin de pouvoir décoder correctement les données :
-framerate
Définissez la fréquence d'images vidéo d'entrée. La valeur par défaut est 25.-pixel_format
Définissez le format de pixel vidéo d'entrée. La valeur par défaut est yuv420p.-video_size
Définissez la taille de la vidéo d'entrée. Il n'y a pas de valeur par défaut, donc cette valeur doit être spécifiée explicitement.
Et voici un petit quelque chose en plus pour les utilisateurs expérimentés. Même chose mais en utilisant VLC pour diffuser la sortie en direct sur le Web, au format Flash :
python capture.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=320 --rawvid-height=240 --rawvid-chroma=RV24 - --sout "#transcode{vcodec=h264,vb=200,fps=30,width=320,height=240}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:8081/stream.flv}"
Edit :Créer un flux webm en utilisant ffmpeg et ffserver
python capture.py | ffmpeg -f rawvideo -pixel_format rgb24 -video_size 640x480 -framerate 25 -i - http://localhost:8090/feed1.ffm