如何解决Gstreamer重复2声道音频
我想使用audiotestsrc生成2个音频音调,然后在16个通道(即一个音调的8个通道和另一个音调的8个通道)之间复制这两个通道。
gst-launch-1.0 interleave name=i ! audioconvert ! wavenc ! filesink location=file.wav audiotestsrc wave=0 freq=100 volume=0.4 ! decodebin ! audioconvert ! "audio/x-raw,channels=1,channel-mask=(bitmask)0x1" ! queue ! i.sink_0 audiotestsrc wave=1 freq=150 volume=0.4 ! decodebin ! audioconvert ! "audio/x-raw,channel-mask=(bitmask)0x2" ! queue ! i.sink_1
我还有一条命令可以在16个通道上产生1种音调:
gst-launch-1.0 audiotestsrc wave=0 freq=100 volume=0.4 ! audio/x-raw,rate=48000,format=S16BE ! queue ! capssetter caps="audio/x-raw,channels=16,channel-mask=(bitmask)0xffff" ! audioconvert ! audioresample ! wavenc ! filesink location=test.wav
所以我的问题:
有没有办法组合这两个命令? 我尝试了几种不同的选择,并假定了 需要“ 0xaaaa”和“ 0x5555”来“映射”哪些频道获得哪些音调。
但是我一直遇到语法错误或
WARNING: erroneous pipeline: Could not link capssetter0 to i
WARNING: erroneous pipeline: Could not link queue0 to i
我觉得我已经很近了,但是还不很远。
任何帮助将不胜感激。
解决方法
好像我找到了一个至少在输出通道数均匀的情况下有效的解决方案:
gst-launch-1.0 interleave name=i audiotestsrc wave=0 freq=100 volume=0.4 ! decodebin ! audioconvert ! audio/x-raw,format=S16BE,channels=1,channel-mask=(bitmask)0x1 ! queue ! i.sink_0 audiotestsrc wave=2 freq=100 volume=0.4 ! decodebin ! audioconvert ! audio/x-raw,channel-mask=(bitmask)0x1 ! queue ! i.sink_1 i.src ! capssetter caps=audio/x-raw,channels=6,channel-mask=(bitmask)0x3f ! audioconvert ! audioresample ! wavenc ! filesink location=test.wav
因此,下一个技巧是处理奇数输出通道数。即5
- 我尝试将输出映射到6个通道,但是使用channel-mask = 0x1f。
- 还尝试使用以下命令将输出映射到6个通道:
! audioconvert ! capssetter caps="audio/x-raw,channels=5,channel-mask=(bitmask)0x1f" !
这些都不起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。