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

thr*_*rag 3 gstreamer

我的管道只是在尝试将audiotestsrc与videotestsrc混合并输出到文件接收器。

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.
Run Code Online (Sandbox Code Playgroud)
  • 产生了new.avi。
  • 视频正好是预期的5秒长
  • 音频约为3.5秒长,剩余的1.5秒则
    很小。

我在这里想念什么?我尝试了sync =“”属性的每种组合,等等。

哪个管道会生成将自动测试模式和视频测试模式混合在一起的测试片段,其中音频和视频的持续时间相同?

谢谢

wim*_*ica 5

audiotestsrc num-buffers=150
Run Code Online (Sandbox Code Playgroud)

默认情况下,每个缓冲区包含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
Run Code Online (Sandbox Code Playgroud)