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

标签 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.
  • new.avi 已生成。
  • 视频长度与预期一致,为 5 秒
  • 音频长约 3.5 秒,剩余 1.5 秒
    沉默。

我在这里缺少什么?我已经尝试了sync=""属性等的每种组合。

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

谢谢

最佳答案

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

关于Gstreamer:如何使音频和视频以相同的速率播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10185474/

相关文章:

python - 以编程方式并排合并两个视频

c++ - 从命令行到 C 代码的 Gstreamer 管道

python - 使用Gstreamer的音频录制脚本质量很差

debugging - 如何将 GStreamer 日志定向到文件?

python-3.x - 使用 Python OpenCV 和 GStreamer 从 UDP 接收器读取 RTSP 流

youtube - 使用gstreamer(1.4.5)从Youtube传输视频

c++ - 通过 Makefile 编译 2 个文件不起作用

udp - 如果客户端在服务器之后启动,则 GStreamer v1.0 UDP 多播流无法正确解码

c++ - 流媒体。将 appsink 写入 filesink