首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ffmpeg在xstack马赛克上叠加波形并指定播放特定音频

如何使用ffmpeg在xstack马赛克上叠加波形并指定播放特定音频
EN

Stack Overflow用户
提问于 2022-04-30 22:40:36
回答 1查看 123关注 0票数 -1

我想要做一个多标题流的马赛克,1)指定哪些音频流要播放和2)叠加波形在每个视频块底部的音频,他们属于。

我成功地用下面的代码创建了有标题的流马赛克。

然而:

  1. 我很难弄清楚如何只指定一个特定的音频源。我找到了amix,但我真的不想混合它们,我只想指定音频a0,或者a1,或者a2,等等,

  1. ,我很难弄清楚如何在视频的底部覆盖每个瓷砖的波形。我很难想出如何在混音中加入显示波。有可能吗?

我希望每个瓷砖看起来像这样,但是因为这些是rtmp流,所以它们需要动态地显示每个流的匹配波形。https://dragonquest64.blogspot.com/2020/01/ffmpeg-audio-waveform.html

如果有人能给我指明正确的方向,那就太好了。我越来越接近了,但是我对所有这些都很陌生,而且已经花了比我应该花的时间更多的时间,所以我很想得到一点帮助。

代码语言:javascript
运行
复制
ffmpeg \
-i rtmp://my.cdn.com/srcEncoders/STREAM-1 \
-i rtmp://my.cdn.com/srcEncoders/STREAM-2 \
-i rtmp://my.cdn.com/srcEncoders/STREAM-3 \
-i rtmp://my.cdn.com/srcEncoders/STREAM-4 \
  -filter_complex " \
      [0:v] setpts=PTS-STARTPTS, scale=qvga \
    , drawtext=text=STREAM-1:fontsize=20:x=10:y=10:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5 [a0]; \
      [1:v] setpts=PTS-STARTPTS, scale=qvga \
    , drawtext=text=STREAM-2:fontsize=20:x=10:y=10:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5 [a1]; \
      [2:v] setpts=PTS-STARTPTS, scale=qvga \
    , drawtext=text=STREAM-3:fontsize=20:x=10:y=10:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5 [a2]; \
      [3:v] setpts=PTS-STARTPTS, scale=qvga \ 
    , drawtext=text=STREAM-4:fontsize=20:x=10:y=10:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5 [a3]; \
      [a0][a1][a2][a3]xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0[out]; \
    amix=inputs=1
      " \
  -map "[out]" \
 -c:v libx264 -b:v 1000k -g 30 -keyint_min 120 -profile:v baseline -preset veryfast -f mpegts "udp://127.0.0.1:1234?pkt_size=1316"
EN

回答 1

Stack Overflow用户

发布于 2022-05-01 01:44:16

  1. 只指定一个特定的音频流:只需使用另一个-map选项来指定音频流,就像您对视频流所做的那样。

  1. showwaves放入混合:每个音频输入需要一个单独的过滤链。

下面是该命令的大致草图:

代码语言:javascript
运行
复制
ffmpeg \
-i rtmp://my.cdn.com/srcEncoders/STREAM-1 \
-i rtmp://my.cdn.com/srcEncoders/STREAM-2 \
-i rtmp://my.cdn.com/srcEncoders/STREAM-3 \
-i rtmp://my.cdn.com/srcEncoders/STREAM-4 \
  -filter_complex " \
      [0:v] setpts=PTS-STARTPTS, scale=qvga \
    , drawtext=text=STREAM-1:fontsize=20:x=10:y=10:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5 [a0]; \
      [0:a] showwaves=r=fps:s=wxh[a0w];
      [1:v] setpts=PTS-STARTPTS, scale=qvga \
    , drawtext=text=STREAM-2:fontsize=20:x=10:y=10:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5 [a1]; \
      [1:a] showwaves=r=fps:s=wxh[a1w];\
      [2:v] setpts=PTS-STARTPTS, scale=qvga \
    , drawtext=text=STREAM-3:fontsize=20:x=10:y=10:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5 [a2]; \
      [2:a] showwaves=r=fps:s=wxh[a2w];\
      [3:v] setpts=PTS-STARTPTS, scale=qvga \ 
    , drawtext=text=STREAM-4:fontsize=20:x=10:y=10:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5 [a3]; \
      [3:a]showwaves=r=fps:s=wxh[a3w];\
      [a0][a0w][a1][a1w][a2][a2w][a3][a3w][a3w]\
        xstack=inputs=8:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2|0_h0+h1+h2+h3|w0_0|w0_h0|w0_h0+h1|w0_h0+h1+h2|w0_h0+h1+h2+h3[out]" \
  -map [out] -map 0:a \
 -c:v libx264 -b:v 1000k -g 30 -keyint_min 120 -profile:v baseline -preset veryfast -f mpegts "udp://127.0.0.1:1234?pkt_size=1316"

根据您的喜好设置r筛选器的框架化s选项和帧大小的s选项。

对于音频,我只是使用了第一个输入,将流说明符从0:a更改为选择另一个输入

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72072700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档