简单示例

简单示例

我对 ffmpeg 还很陌生,有一个问题我找不到解决方案。我真的希望你们能帮我解决这个问题。

在一台服务器上,我收到 1080p 流,使用 ffmpeg 创建具有多种比特率和分辨率的新流,然后将其发送到此服务器上的 rtmp 目标。下面是我目前使用的 CL 命令,它正在运行。

ffmpeg -i - -copyts -muxdelay 0  -c:a libfaac -ab 128k 
-c:v libx264 -preset faster -profile:v main -level 3.1 -crf 20 -g 50 -b:v 1500k -s:v 1920x1080 -f flv rtmp://localhost/stream/output_stream 
-c:a libfaac -ab 64k -c:v libx264 -preset faster -profile:v main -level 3.1 -crf 23 -g 50 -b:v 1000k -s:v 1280x720 -f flv rtmp://localhost/stream/output_stream 
-c:a libfaac -ab 32k -c:v libx264 -preset faster -profile:v main -level 3.1 -crf 23 -g 50 -b:v 800k -s:v 960x540 -f flv rtmp://localhost/stream/output_stream

现在我面临的挑战是需要将其发送到多个服务器。有没有办法添加多个输出?

最后,传入的 1080p 流应该获得多个比特率,并应发送到大约 10 个不同的 RTMP 服务器。

我真的希望有人能帮助我。

答案1

您可以使用三通复用器如果任何相同的流要被发送到多个输出。

简单示例

ffmpeg -i input -map 0:v -map 0:a -c:v libx264 -b:v 4000k -maxrate 4000k -bufsize 8000k -b:a 128k -g 50 -c:a aac -flags +global_header -f tee "[f=flv:onfail=ignore]rtmp://localhost/stream/output_stream0|[f=flv:onfail=ignore]rtmp://localhost/stream/output_stream1"

如果不是实时源,则添加-re实时输入选项。否则省略实时输入(网络摄像头、https、rtmp 等)。-i input-re

视频大小不同,但音频相同

与视频相比,音频占用的比特率并不多,因此您可以考虑放弃多种音频比特率,只编码一次,然后对所有输出使用相同的流。基本示例:

ffmpeg -i input -filter_complex \
"[0:v]split=2[s0][s1];[s0]scale=1280:-2[v0];[s1]scale=960:-2[v1]" \
-map "[v0]" -map "[v1]" -map 0:a -c:v libx264 -b:v:0 1000k -b:v:1 800k -c:a aac -flags +global_header -f tee \
"[select=\'v:0,a\':f=flv:onfail=ignore]rtmp://localhost/stream/output_stream0|[select=\'v:1,a\':f=flv:onfail=ignore]rtmp://localhost/stream/output_stream1"

无关,但你使用的是 libfaac,这意味着你的ffmpeg版本已经过时了。所以你确实应该升级。

相关内容