忍者ブログ

数学をわかりやすくするblog

[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

gstreamerで黒枠に字幕を表示する

video test

gst-launch-1.0 videotestsrc ! xvimagesink

audio test

Ctrl+C で強制終了
gst-launch-1.0 audiotestsrc ! pulsesink

動画を普通に再生する

queue はなくてもいいけどあると multi thread 化するらしい

gst-launch-1.0 filesrc location="test.mp4" ! decodebin name=decode \
decode. ! queue ! xvimagesink \
decode. ! queue ! pulsesink

黒枠を作って字幕を表示する

gst-launch-1.0 videomixer name=mix sink_1::ypos=540 ! xvimagesink \
videotestsrc pattern=white ! video/x-raw,width=960,height=540 ! mix.sink_0 \
videotestsrc pattern=black ! video/x-raw,width=960,height=100 \
! subtitleoverlay name=overlay font-desc="selif" ! mix.sink_1 \
filesrc location="test.srt" ! subparse subtitle-encoding=UTF-8 ! overlay.

黒枠に字幕を表示しながら動画を再生する

gst-launch-1.0 videomixer name=mix sink_1::ypos=540 ! xvimagesink \
filesrc location="test.mp4" ! decodebin name=decode \
decode. ! queue ! videoscale ! video/x-raw,width=960,height=540 ! mix.sink_0 \
decode. ! queue ! pulsesink \
videotestsrc pattern=black ! video/x-raw,width=960,height=100 \
! subtitleoverlay name=overlay font-desc="selif" ! mix.sink_1 \
filesrc location="test.srt" ! queue \
! subparse subtitle-encoding=UTF-8 ! overlay.

gst-subtitle.sh

一時停止とか音量調節とかできないけど

#!/bin/sh
WIDTH=960
VIDEO_HEIGHT=540
SUBTITLE_HEIGHT=100
FONT_NAME="selif"
VIDEO_PATH="$1"
SRT_PATH="${1%.*}.srt"

gst-launch-1.0 videomixer name=mix sink_1::ypos=${VIDEO_HEIGHT} ! xvimagesink \
filesrc location="${VIDEO_PATH}" ! decodebin name=decode \
decode. ! queue ! videoscale ! video/x-raw,width=${WIDTH},height=${VIDEO_HEIGHT} ! mix.sink_0 \
decode. ! queue ! pulsesink \
videotestsrc pattern=black ! video/x-raw,width=${WIDTH},height=${SUBTITLE_HEIGHT} \
! subtitleoverlay name=overlay font-desc="${FONT_NAME}" ! mix.sink_1 \
filesrc location="${SRT_PATH}" ! queue \
! subparse subtitle-encoding=UTF-8 ! overlay.
実行可能にして
$ chmod u+x gst-subtitle.sh

PATHにある場所に移動
$ mv gst-subtitle.sh ~/bin/

$ gst-subtitle.sh test.mp4

字幕をstdoutに表示する

gst-launch-1.0 --quiet filesrc location="test.srt" \
! subparse subtitle-encoding=UTF-8 ! fdsink sync=true

英語字幕をfestivalで読み上げ

gstreamer の link ではなく bash の pipe で festival につなげる。ただ上手く読み上げてくれないときがある

gst-launch-1.0 --quiet filesrc location="test.srt" \
! subparse subtitle-encoding=UTF-8 ! fdsink sync=true | festival --tts

本当は open_jtalk で日本語字幕を読んで欲しいけど難しそう

情報の表示の仕方

gst-inspect-1.0 | grep sink
gst-inspect-1.0 appsink
PR

コメント