GNU/Linux >> Tutoriels Linux >  >> Linux

Transférez les images OpenCV brutes vers FFmpeg

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

Linux
  1. Comment installer FFmpeg sous Linux

  2. Télécharger Manjaro 17 – Images ISO DVD

  3. Linux – Mode clavier brut ?

  4. Faire sortir Tail -f sur un tuyau cassé ?

  5. Comment diriger les commandes vers n'importe quel terminal ?

Comment installer FFmpeg sur Linux

PiShrink - Rendre les images Raspberry Pi plus petites

Tuyau B à D ? – A &&B || C | RÉ?

FAQ sur les images programmées

Comment installer OpenCV sur Ubuntu 20.04

Configurer et créer OpenCV pour une installation FFMPEG personnalisée