2010-08-02 82 views
0

我想創建一個FUSE FS將所有聲音文件轉碼爲MP3。我的第一個想法是使用gstreamer作爲轉碼的後端。 我想過用這條管道:保險絲&gstreamer轉碼

gst-launch -v filesrc location=01\ New\ Born.flac ! decodebin ! audioconvert ! lame vbr=4 vbr-quality=9 ! id3v2mux ! appsink 

保險絲的Python綁定想到調用此函數當讀取一個文件:

def read(self, length, offset): 

我怎麼會緩衝從GStreamer的轉移到熔絲FS ?我不怎麼處理這個問題。我以前從未使用過appsink。

我希望這很清楚我的意思。

+0

如果你正在做這個練習,那就搖滾吧。如果您將壓縮音頻轉碼爲不同的壓縮算法或質量,請不要:http://www.vorbis.com/faq/#transcode – msw 2010-08-02 12:05:19

+1

只是一個練習:) – Leon 2010-08-02 12:10:55

回答

0

我不認爲你需要打擾appsink。我的直覺是,你可以進一步將轉碼部分與文件系統部分分離得更好。在單獨的線程或進程中將代碼轉換爲文件鏈接並傳遞消息以告知FUSE守護程序轉碼已經進行了多久。

代替appsink,我會使用filesink,在大量工作線程/進程中轉碼,將.mp3s寫入大小控制的緩存目錄,並且read()會阻塞,直到轉碼後的文件進行足夠長的時間請求。

以下是filesink的來源。在沒有查找的情況下,它似乎只是將每個緩衝區的內容附加到文件中。 http://mediatools.cs.ucl.ac.uk/nets/newvideo/browser/gst-cvs/gstreamer/plugins/elements/gstfilesink.c#L436

你也可以通過下載mp3fs或gstfs節省很多時間和麻煩,它們已經完成了你提到的幾乎完全一樣。

0

你試過: giosink寫入任何GIO支持位置 giosrc從任何GIO支持位置

隨着吉奧你應該能夠把FUSE任何文件系統讀取。