なぜこれがうまくいかないのですか?
cat /dev/video1 | mplayer -
操作できる場合は、「tee」を使用してビデオを同時に再生して録画して、mplayerとmencoderにデータを提供できます。
ライブビデオ(/dev/video1:input=1:norm=NTSC)を再生し、遅延なく同時に録画したいです。
mplayerはビデオをうまく再生します(目立つ遅延なし)。
mencoderはよく文書化されています。
しかし、/dev/videoの出力を「ティー」して両方に供給できる方法がわかりません。 (エンコードしてからエンコードされたビデオをすぐに再生する方法を知っていますが、これにより待ち時間が長すぎます。)
mplayerとmencoderがstdinで読むことができる場合は、 "tee"を使用してこの問題を解決できます。
どうすればいいですか?
[ところで、待ち時間を追加しない限り、同時に再生して録音するソリューションに満足しています。私はmplayerのファンではありません。ただし、最初にエンコードしてから再生すると待ち時間が長くなります。 ]
答え1
標準入力で再生するときは、わずかなキャッシュを提供する必要があります。
cat /dev/video1 | mplayer -cache 1024 -
対応するキャッシュオプションがないと、「照会失敗リニアストリームでは後方には見えません」というエラーが発生します。
答え2
mplayerのマニュアルページでは、mplayer -
標準入力から読み取る必要がありますが、-noconsolecontrols
mplayerが標準入力からキーボード制御イベントを読み取らないように指定する必要があります。
答え3
私は単一のmplayerを使用して欲しいものを達成することは不可能だと思います。私はこの質問が次のように尋ねることを発見し、明らかに次のように答えました。
抜粋:[MPlayer-User] カメラのIPストリームを同時に表示して記録しますか?
これはうまくいきますが、同じmplayerプロセスで実行したいと思います。スレーブモードでファイルにストリームを書き込む方法を知っていますか?ドキュメントで正しいコマンドが見つかりませんでした。
これは不可能だと思います。 MPlayerは再生できますまたはどちらも代わりに1つのストリームをダンプします。
ただし、あるジョブを使用してストリームをダンプし、別のジョブを使用して録音されたストリームを再生できます。少なくとも、ネットワークトラフィックは3倍にはなりません。
これ元の質問答えは次のとおりです。
同時にストリームを表示し、それをファイルに書き込む可能性(したがってロギング)を表示する必要があります。私のポイントは、私がやりたいことも同じプロセスです。
実際にはスレーブモードのmplayerプロセスがあります。
$ mplayer -slave -wid id_window camera_address/
ログインするたびに新しいプロセスを開始します。今回はスレーブプロセスではありません。
$ mplayer -dumpvideo camera_address -dumpfile stream.mp4/
これはうまくいきますが、同じmplayerプロセスで実行したいと思います。スレーブモードでファイルにストリームを書き込む方法を知っていますか?ドキュメントで正しいコマンドが見つかりませんでした。
ffmpegを使用していますか?
ちょうどアイデアですが、ffmpegのウェブサイトで、次の内容を議論するためのwikiの投稿を見つけました。複数出力の生成。おそらく/dev/video1
mplayerで冗長ストリームを分割して使用できますか?
答え4
8年以上経過した後は、私が見つけたソリューションを公開する必要があります。
Pythonを使用してください。 AFAICT、これは標準のLinuxツールだけでは不可能です。
この記事を読んでいる場合は、壁に頭をぶつけるのをやめることをお勧めします。
非常におおよその - pygame(pygameインポート)を使用してカメラを読み取り、ビデオを表示し、OpenCV(cv2インポート)を使用してビデオを保存します。これはうまくいきます。