GNU/Linux >> Linux の 問題 >  >> Linux

生の OpenCV イメージを FFmpeg にパイプする

ちょっと遅れましたが、私の強力な VidGear Python ライブラリは、あらゆるプラットフォームで OpenCV フレームを FFmpeg にパイプライン処理するプロセスを自動化します .以下は基本的な 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

ソース:https://abhitronix.github.io/vidgear/latest/gears/writegear/compression/usage/#using-compression-mode-with-opencv

より高度なアプリケーションと機能については、VidGear ドキュメントをご覧ください。

お役に立てば幸いです!


いじくり回しましたが、FFmpeg rawvideo demuxer を使用して解決しました:

python capture.py | ffmpeg -f rawvideo -pixel_format bgr24 -video_size 640x480 -framerate 30 -i - foo.avi

生のビデオには想定されるビデオ パラメータを指定するヘッダーがないため、データを正しくデコードするには、ユーザーが指定する必要があります。

  • -framerate 入力ビデオのフレーム レートを設定します。デフォルト値は 25 です。
  • -pixel_format 入力ビデオのピクセル形式を設定します。デフォルト値は yuv420p です。
  • -video_size 入力ビデオのサイズを設定します。デフォルトはないため、この値を明示的に指定する必要があります。

そして、パワーユーザー向けに少しおまけがあります。同じことですが、VLC を使用してライブ出力を Web にストリーミングします。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}"

編集:ffmpeg と ffserver を使用して webm ストリームを作成する

python capture.py | ffmpeg -f rawvideo -pixel_format rgb24 -video_size 640x480 -framerate 25 -i - http://localhost:8090/feed1.ffm

Linux
  1. CloudServerイメージについて

  2. クラウドサーバーイメージの制限

  3. カスタム FFMPEG インストールへの OpenCV の構成とビルド

  1. Manjaro 17 –DVDISOイメージをダウンロードする

  2. ffmpeg x11単一のウィンドウをグラブする

  3. ローキーボードモードとは何ですか?

  1. 壊れたパイプでTail-fを終了しますか?

  2. コマンドを任意の端末にパイプする方法は?

  3. 非表示のベース画像