次のパイプラインを使用して壊れた映像を作成しました。
_gst-launch-1.0 v4l2src ! filesink location=encode.mjpeg
_
どういうわけかgstreamerはまだそれを再生することができます:
_gst-launch-1.0 filesrc location=encode.mjpeg ! jpegdec ! videoconvert ! xvimagesink
_
ただし、誤ってコンテナを使用しなかったため、ストリームは非常に速いペースで再生されますframerate=(fraction)0/1
。壊れたファイルを再圧縮せずに_.avi
_または他のコンテナに変換する方法はありますか?
次の些細な多重化は期待どおりに機能しませんでした。
_gst-launch-1.0 filesrc location=encode.mjpeg \
! 'image/jpeg,framerate=30/1,width=1280,height=720' ! avimux \
! filesink location=encode.avi . -v
_
どういうわけか、gstreamerはかなりのCPUを消費することなく、約1 FPSで非常にゆっくりと_encode.avi
_を再生します。また、Vlc`もAdobe AfterEffectsもインポートできません。正しくデコードされた、最初のフレームのストライプのみが上部に表示されます。
Aviへのmuxingで発生している問題は、filesrcがmjpegフレームに適切に配置されていないバッファをavimuxに提供しているため、avimuxが内部で間違った配置のサンプルを作成しているため、プレーヤーがそれらを使用しにくくなっていることに関連しています。後で再生中に。
これは、capsfilter(jpegparse?)の後にmjpegパーサーを使用することで修正できます。もう1つのオプションは、サンプルをデコードおよび再エンコードして、サンプルを適切に整列および多重化することです。次のパイプラインが機能するはずです。
gst-launch-1.0 filesrc location=encode.mjpeg \
! 'image/jpeg,framerate=30/1,width=1280,height=720' ! decodebin ! videoconvert ! \
<some encoder> ! <some muxer> ! filesink location=outputfile
エンコーダーとマルチプレクサーを好きなように選択できます。最初に必要に応じて、それらをjpegにエンコードし、muxをaviにエンコードすることもできます。
編集:デコードせずにコンテンツをaviに多重化するには、次のようにします。
gst-launch-1.0 filesrc location=encode.mjpeg \
! 'image/jpeg,framerate=30/1,width=1280,height=720' ! jpegparse ! avimux \
! filesink location=encode.avi . -v
Jpegparseが非常にうまく機能する場合は、「image/jpeg、framerate = 30/1、width = 1280、height = 720」は必要ありません。