stdinでmplayerを再生する方法は?

stdinでmplayerを再生する方法は?

なぜこれがうまくいかないのですか?

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 -標準入力から読み取る必要がありますが、-noconsolecontrolsmplayerが標準入力からキーボード制御イベントを読み取らないように指定する必要があります。

答え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/video1mplayerで冗長ストリームを分割して使用できますか?

答え4

8年以上経過した後は、私が見つけたソリューションを公開する必要があります。

Pythonを使用してください。 AFAICT、これは標準のLinuxツールだけでは不可能です。

この記事を読んでいる場合は、壁に頭をぶつけるのをやめることをお勧めします。

非常におおよその - pygame(pygameインポート)を使用してカメラを読み取り、ビデオを表示し、OpenCV(cv2インポート)を使用してビデオを保存します。これはうまくいきます。

関連情報