Gstreamer:如何以相同的速率播放音频和视频

时间:2012-04-17 05:15:40

标签: gstreamer

我的管道只是试图将audiotestsrc与videotestsrc混合并输出到filesink。

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 =“”属性等的每个组合。

在音频和视频持续时间相同的情况下,哪个管道会生成一个自动模式和视频图案模式的测试片段?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您可以使用audiotesrc的blocksize roperty来匹配帧的持续时间。这是以字节为单位的,因此您可能希望在audiotestsrc之后使用大写过滤器来选择采样率和样本格式。