【问题标题】:ffmpeg output to multiple rtmp simultaneouslyffmpeg同时输出到多个rtmp
【发布时间】:2021-06-16 23:18:35
【问题描述】:

我有这种情况:

我需要流到 3 个不同的 rtmp

  • 1 rtmp 全部音视频正常
  • 2 rtmp 是视频但不同的音频
  • 3 rtmp 只是第一个视频的音频

这是我的阐述...

ffmpeg -re -i /usr/VIDEO/my_video.mp4 -i /usr/VIDEO/x_audio.mp3 \
-map 0:v -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -map 0:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/live/pass \
-map 0:v -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -map 1:a -streamloop -shortest -f flv rtmp://my_ip/noaudio/pass \
-map 0:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/only_audio/pass

我认为还可以,但不是。

我哪里出错了

【问题讨论】:

    标签: audio ffmpeg stream video-streaming audio-streaming


    【解决方案1】:

    好的,找到解决办法

    ffmpeg -re -i /usr/VIDEO/my_video.mp4 -re -i /usr/VIDEO/xaudio.mp3 \
    -map 0 -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/live/pass \
    -map 0:v -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -map 1:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/noaudio/pass \
    -map 0:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/onlyaudio/pass
    

    这样就可以了

    要循环播放音频,请在音频前添加 -stream_loop (--NUMBER--),其中 (--NUMBER--) 是应该重复的次数

    一次-stream_loop 1

    两次 1nce -stream_loop 2

    3 次 1nce -stream_loop 3

    ...等等

    ffmpeg -re -i /usr/VIDEO/my_video.mp4 -stream_loop (--NUMBER--) -re -i /usr/VIDEO/xaudio.mp3 \
    -map 0 -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/live/pass \
    -map 0:v -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -map 1:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/noaudio/pass \
    -map 0:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/onlyaudio/pass
    

    【讨论】:

    • 浪费且效率低下,因为您将视频编码两次,但我想我的答案太复杂了。
    • 我只进行了一次编码,但没有工作......我不知道为什么......我已经完成了你的解决方案但没有工作......不知道为什么:)
    【解决方案2】:

    使用tee muxer。它更复杂但更高效:您可以对流进行一次编码,然后将它们重新用于多个输出。

    ffmpeg -re -i video.mp4 -re -i audio.mp3 -map 0 -map 1:a -c:v libx264 -c:a aac -vf "scale=1024:-2,format=yuv420p" -b:v 2000k -bufsize 3000k -maxrate 2000k -g 60 -b:a 192k -ar 44100 -shortest -f tee "[select=\'v:0,a:0\':f=flv]rtmp://my_ip/normal|[select=\'v:0,a:1\':f=flv]rtmp://my_ip/altaudio|[select=\'a:0\':f=flv:onfail=ignore]rtmp://my_ip/onlyaudio"
    

    【讨论】:

    • 它不工作。还需要创建音频循环以获取视频音频的位置
    • @AntonioGargiulo 在-i audio.mp3之前添加-stream_loop -1输入选项
    • -stream_loop -1 永远流式传输我试过...
    • @AntonioGargiulo 你没有指定你希望它循环多少次,所以我猜你想要 -1 表示不间断循环。
    • 我希望在播放完视频后也能停下来......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2016-05-22
    • 2019-03-25
    • 1970-01-01
    • 2016-01-11
    • 2021-09-27
    相关资源
    最近更新 更多