我的管道只是尝试将 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/