2012-04-17 133 views
2

我的管道線只是試圖將audiotestsrc與videotestsrc複用並輸出到文件鏈接。Gstreamer:如何讓音頻和視頻以相同的速度播放

videotestsrc num-buffers=150 ! video/x-raw-yuv,width=1920, height=1080 ! 
    timeoverlay ! videorate ! queue ! xvidenc ! avimux name=mux mux. 
     ! filesink sync=true location=new.avi 
audiotestsrc num-buffers=150 ! 
    queue ! audioconvert ! audiorate ! mux. 
  • new.avi被產生。
  • 視頻正好是5秒長預期
  • 音頻約3.5秒長,其餘1.5秒是
    slient。

我在這裏錯過了什麼?我已經嘗試過每種組合的sync =「」屬性等。

什麼樣的流水線會將自動測試模式和可視化測試模式一起生成一個測試剪輯,其中音頻和視頻的持續時間相同?

感謝

回答

4
audiotestsrc num-buffers=150 

默認情況下每個緩衝區中包含1024個樣本:samplesperbuffer 這意味着要生成150 * 1024 = 153600個樣品。 假設44.1kHz,持續時間爲153600/44100 = 3.48秒。

所以如果你需要5秒的音頻,你需要5 * 44100 = 220500個樣本。 samplesperbuffer == 1024,這意味着220500/1024 = 215.33緩衝區。 (即215個或216個緩衝區)。

如果設置samplesperbuffer到441會更容易些,那麼您需要的每一秒的音頻100個緩衝區:

audiotestsrc num-buffers=500 samplesperbuffer=441 
+0

輝煌!謝謝。完美的答案。 – thrag 2012-04-19 14:54:41

2

您可以使用audiotesrc的塊大小roperty的匹配幀的持續時間。這是以字節爲單位的,因此您可能希望在audiotestsrc後使用caps filter來選擇採樣率和採樣格式。