Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~
在本系列文因為工作上的產品應用需求,進而探索到很多層面的點滴事。透過每篇 EP 的分享把這些點滴整理,看起來或許像是個獨立的小品抒發文、也或許是一系列技術研究文!?
總之,就當作的隨手雜記文吧!
本篇是 莫名其妙就跟世界等級的 OpenSource 專案攪和了!? 系列文的 EP12。
在 EP01 的 Gstreamer 運作的基本原理提到:
[Source] → [Decoder] → [Filter/Effect] → [Encoder] → [Sink]
其中 [Filter/Effect] 這件事情,最簡單的舉例大概就是,加個浮水印或是加個時戳在影片中吧!
在 Gstreamer 當中要加時戳在影片當中的話,可以用 clockoverlay 來完成。
所以原本的指令:
gst-launch-1.0 filesrc location="c:/tmp/bbb_sunflower.mp4" ! qtdemux ! avdec_h264 ! videoconvert ! qsvh264enc ! h264parse ! mp4mux ! filesink location="c:/tmp/new_bbb_sunflower.mp4"
在 videoconvert 這個元素前加入:
clockoverlay time-format="%Y-%m-%d %H:%M:%S" valignment=top halignment=right xpad=12 ypad=6 shaded-background=true font-desc="Sans, 12"
就會變成下列指令:
gst-launch-1.0 filesrc location="c:/tmp/bbb_sunflower.mp4" ! qtdemux ! avdec_h264 ! clockoverlay time-format="%Y-%m-%d %H:%M:%S" valignment=top halignment=right xpad=12 ypad=6 shaded-background=true font-desc="Sans, 12" ! videoconvert ! qsvh264enc ! h264parse ! mp4mux ! filesink location="c:/tmp/new_bbb_sunflower.mp4"
執行上述指令後的結果會顯示:
上述指令執行完畢後會顯示:
而轉出來的影片就會有類似效果:
上述指令只是作作效果,請不要 "計較" 為什麼時戳跟影片時間長度核對不起來唷^_<
透過上述的例子就可以很快速地了解到整個 Gstreamer 運作的基本原理的每個環節。
在 Gstreamer 當中的每個 元素 (Element) 也都是保持著這五大要素的概念去設計而成,也許可以理解成像俄羅斯娃娃然後每個娃娃都可以串接的那種感覺吧!
PS 為何會核對不起來的,可以想想看整個轉檔的時間花的時間,跟影片本身的播放長度時間。所以時戳的用途通常不會用在影片轉檔上。