web-dev-qa-db-ja.com

VLCを使用して、現時点で特定のフレームをプルします

pythonまたはShellで任意の種類のコマンドを作成して、vlcで再生またはストリーミングされているビデオから特定のフレームをプルしようとしています。

ビデオファイルがあり、VLCで開き、[再生]をクリックするシナリオを想像してみてください。 pythonまたはShellコマンドを使用して、最初に遭遇したフレームをプルし、何らかの処理を行います。処理が完了すると、ビデオが到達した正確な時間に別のフレームをキャプチャします。

正直なところ、私が再生しているビデオの現在の「時間」(時間:分:秒、または映画で経験したこと)をVLCに提供してもらうことができれば、それでうまくいき、ffmpegを使用できます。 。

Linux14.04を実行しています。

2
user3026388

私が再生しているビデオの現在の「時間」をVLCに提供してもらうことさえできれば…

これは行うことができます。 VLCは多くのインターフェースを提供します。 telnetを使用しましょう。


ステップ1:VLCでTelnetを有効にする

ワンタイムオンデマンド方式:

vlc --extraintf telnet --telnet-port 4212 --telnet-password "foobar" video_file_to_play.avi

または永続的な構成。 VLCを実行しますツール->設定(または Ctrl+P)、次に:

config1

そして

config2

注:この永続的な方法では、VLCを再起動する必要があります。


ステップ2:テスト

これで、telnetを使用してVLCを制御できます。プロンプトが表示されたら、正しいパスワードを入力します。例:

$ telnet localhost 4212
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
VLC media player 2.2.2 Weatherwax
Password: 
Welcome, Master
> get_time
30
>

ご覧のとおり、現在の再生時間を取得するコマンドはget_timeです。 helpと入力してVLCコマンドの詳細を確認し、quitと入力して終了します。 snapshotが役立つかもしれません。


ステップ3:スクリプトで使用する

非常に単純なパイプ。ここでは、ncの代わりにtelnetを使用しています(そしてfoobarは私のパスワードです、あなたのパスワードを使用してください):

printf '%s\n' "foobar" "get_time" | nc localhost 4212

私のVLCは以下を返します:

VLC media player 2.2.2 Weatherwax
Password: ����
Welcome, Master
87
> Bye-bye!

したがって、headtailを使用して、関連する行のみを抽出します。

printf '%s\n' "foobar" "get_time" | nc localhost 4212 | head -n 4 | tail -n 1

残念ながら、時間分解能は1秒です。現在のフレーム番号などを取得するコマンドが見つかりません。

2