2017-02-13 24 views
1

フェードインとフェードアウトするビデオファイルとオーバーレイ字幕を取りたいです。ビデオミキサーのシンクパッドのアルファ値を動的に変更する方法

Gstreamerの使い方を学び始めました。

これまでのところ、私は一緒にvideomixer要素でオリジナルのビデオストリーム上にtextrender要素によって描かれた字幕ストリームをcompositsパイプラインを入れることができました。残念なことに、textrenderとその姉妹要素のテキストオーバーレイにはフェードイン/フェードアウト機能はありません。

ビデオミキサーシンクパッドにはアルファプロパティがあります。今のところ、videomixer.sink_1という名前のパッドのアルファ値を1.0に設定しました。私は適切な時期に内外字幕コンポーネントのフェードを行うことができるように、動的に時間をかけてそのアルファ値を変更する方法を探しています

#!/bin/bash 

gst-launch-1.0 \ 
    filesrc location=sample_videos/my-video.mp4 ! decodebin ! mixer.sink_0 \ 
    filesrc location=subtitles.srt ! subparse ! textrender ! mixer.sink_1 \ 
    videomixer name=mixer sink_0::zorder=2 sink_1::zorder=3 sink_1::ypos=-25 sink_1::alpha=1 \ 
     ! video/x-raw, height=540 \ 
     ! videoconvert ! autovideosink 

:ここではそのパイプラインのコマンドラインバージョンです。 (私はSRTファイルを別々に解析して、フェードの開始と終了を判断します。)

私はGstBin C APIを研究しています(私の実際のコードはPythonで書かれています)。私はGst.parse_launch()でパイプラインを作成した後、gst_get_bin_by_name()で任意の名前付き要素を取得し、その値を使ってパッド "sink_1"にアクセスすることができます。

これまでのところ、タイマーイベントを受け取るイベントハンドラから動的にアルファ値を変更することはできますか? videomixer要素はそのパッドのプロパティの変更に即座に応答しますか?他の誰かがこれをしましたか?

ここで部分的な回答が見つかりました:https://stackoverflow.com/a/17331845/270511しかし、パイプラインの実行後にこれが動作するかどうかはわかりません。

答えて

1

はい、それはで動作します。

ビデオミキサーパッドは、変更に動的に反応します。私はアルファと位置の両方のプロパティでこれを行っています。

g_object_set (mix_sink_pad, "alpha", 0.5, NULL); 

私はC言語を使用していますが、ビンとパッドのサウンドにアクセスするためのPython戦略が正しいとします。私のgstreamerコードは、udpソケットからの入力に基づいて応答しますが、タイマーイベントは正常に動作します。あなたは100ミリ秒ごとにアルファ値を変更したい場合たとえば、あなたはその後、コールバックでg_object_setを使用してアルファプロパティを変更することができ、この

g_timeout_add_seconds (100, alpha_changer_cb, loop); 

ような何かを行うことができます。動的に更新され、非常にスムーズに見えます。

+0

それは素晴らしいです。ありがとうございました。私はコールバックなしでこれを達成するためのより効率的な方法があるのだろうかと思います。サイトの各訪問者は同じビデオとサウンドトラックを表示しますが、その訪問者に固有のカスタム字幕が表示されます。しかし、字幕のタイミングは決して変化しないので、フェード効果は常に同じ場所で起こるはずです。元のビデオ(最下位層)に影響を与えずに字幕の不透明度を制御する3番目のトラックでこれを実現する方法がありますか?私は新しい質問を始めるべきですか? –

+1

私は専門家ではありませんが、コールバックなしでこれを行うためのより効率的な方法があります。私のgstreamerの経験のほとんどはライブビデオになっているので、私は時限イベントにあまり慣れていません。 3番目のトラックは適切なアイデアのように聞こえ、元のレイヤーに影響を与えずに3番目のトラックを確実にコントロールできます。あなたは既にそれに精通しているかもしれませんが、gstreamerアプリケーションマニュアルは非常に便利で、いくつかの非常に良い例があります:https://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/manual.pdfこれをチェックしてくださいプロジェクトも同様にhttps://github.com/voc/voctomix –

関連する問題