iT邦幫忙

2025 iThome 鐵人賽

DAY 10
1

Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~

在本系列文因為工作上的產品應用需求,進而探索到很多層面的點滴事。透過每篇 EP 的分享把這些點滴整理,看起來或許像是個獨立的小品抒發文、也或許是一系列技術研究文!?

總之,就當作的隨手雜記文吧!

本篇是 莫名其妙就跟世界等級的 OpenSource 專案攪和了!? 系列文的 EP10。


繼續介紹 Gstreamer 運作的基本原理所提的:
[Source] → [Decoder] → [Filter/Effect] → [Encoder] → [Sink]

前一回介紹了 Decoder (解碼器),這回來談談 Encoder:編碼器吧!

Encoder (編碼器) 就是把訊號/資料進行 Encode 後再拋出去。
嘖...聽起來好像一句廢話。

換句話說:
Encoder (編碼器) 會將進來的訊號或資料轉換成另外一種方式呈現出來。

這樣子,不知道有沒有好一點?

那為什麼需要 Encoder (編碼器),因為輸入過來的這些訊號或資料可能會需要被 "傳輸" 或 "儲存"。

還是回到先前的舉例,一個 mp4 影片檔案。

如果假定這個影片檔案所攜帶的資訊是一樣的,無論是 "傳輸" 或 "儲存" 的需求,都會希望要這個 mp4 影片檔案大小可以越小越好;若假定這個 mp4 影片檔案的大小是一樣的,那就會希望這個影片檔案所能攜帶的資訊越多越好。

所以 Encoder 的作用就是透過 "運算" 把訊號或資料轉換成另外一種形式。

前一回介紹使用 Gstreamer 的測試指令為:

gst-launch-1.0 filesrc location="c:/tmp/bbb_sunflower.mp4" ! decodebin ! autovideosink

那 "decodebin" 是解碼器或編碼器嗎?

不是。

decodebin 是一個 gstreamer 會在已知的情況下協助找出用該平台最合適的 decoder 或 encoder 重新組裝 pipeline 的元素。

如果就要直接拋給輸出到螢幕顯示的話就不需要再透過 encoder 的編碼。

所以若要同時看到 decoder 與 encoder 的存在,通常是把一個多媒體影音檔,轉成另外一種多媒體影音檔。

所以,在 Windows 平台執行的指令可以如下:

gst-launch-1.0 filesrc location="c:/tmp/bbb_sunflower.mp4" ! qtdemux ! avdec_h264 ! x264enc ! filesink location="c:/tmp/new_bbb_sunflower.mp4"

(qtdemux 請先忽略)

看看這指令裡的 decoder 為 avdec_h264; encoder 為 x264enc

喔,對了...

上述的指令可以把原本的 mp4 影音檔案讀取後,並透過 decoder 解碼成 raw video (原始未編碼影像) ,然後再透過 x264enc 編碼成 H.264 格式的原始串流存成 .mp4 檔案。

檔案存出來是存出來了,沒錯。

但~~

因為沒有按照正確的封裝成 mp4 的檔案格式,所以檔案是無法被一般的影音播放軟體正確讀取與播放的。
bad-01


上一篇
EP 09
下一篇
EP 11
系列文
莫名其妙就跟世界等級的 OpenSource 專案攪和了!?11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言