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

Gstreamer:如何让音频和视频以相同的速率播放,gstreamer,Gstreamer,我的管道只是尝试将audiotestsrc与videotestsrc进行多路复用,并输出到FileLink 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 audiote

我的管道只是尝试将audiotestsrc与videotestsrc进行多路复用,并输出到FileLink

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.
  • 产生了新的.avi
  • 视频正好是预期的5秒长
  • 音频约为3.5秒,剩余的1.5秒为
    沉默
我错过了什么?我尝试了sync=”“属性的所有组合,等等

在音频和视频持续时间相同的情况下,哪条管道会生成自动测试模式和视频测试模式混合在一起的测试片段


谢谢

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

audiotestsrc num-buffers=150
默认情况下,每个缓冲区包含1024个样本: 这意味着您正在生成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

明亮的谢谢完美答案。