5

我的管道只是尝试将 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.
  • new.avi 已生成。
  • 视频与预期的一样长 5 秒
  • 音频长约 3.5 秒,其余 1.5 秒为
    静音。

我在这里想念什么?我已经尝试过所有 sync="" 属性的组合,等等。

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

谢谢

4

2 回答 2

8
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
于 2012-04-18T12:01:40.887 回答
2

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

于 2012-04-18T07:47:10.363 回答