ffmpeg 转码到 youtube 直播坏视频容器
ffmpeg transcode to youtube live bad video container
我一直在尝试将 obs studio 生成的流转码到我的 nginx 服务器并将其发送到 youtube。现在我已经让它与 twitch 一起工作,我知道这些设置实际上大部分都正确地对其进行了转码并且是可见的。问题是 youtube live 将其视为错误的视频设置,并告诉我更改当前的视频容器格式。另一个可能无关的副作用是视频流在 YouTube 上看起来非常糟糕。看起来它是以低比特率和其他东西流式传输的,但真正的问题是糟糕的视频设置错误。
正在使用的ffmpeg命令如下
ffmpeg -i rtmp://localhost/Private/Private1 -vb 6000k -minrate 6000k -maxrate 6000k -bufsize 6000k -s 1280x720 -c:v libx264 -preset faster -r 50 -g 100 -keyint_min 50 -x264opts nal-hrd=cbr:force-cfr=1 -sws_flags lanczos -tune film -pix_fmt yuv420p -c:a copy -f flv -threads 6 -strict normal rtmp://a.rtmp.youtube.com/live2/{key}
我尝试过不同的帧率并在谷歌上搜索了一段时间,但一无所获或错误地解释了所有内容。无论哪种方式,我都会很高兴在这里得到一些帮助。
系统信息。
- OS: Ubuntu 服务器 16.04 LTS
- 内存:10GB
- 处理器:AMD Phenom(tm) II X6 1090T
- 显卡:Geforce GT 520
互联网。
- 上传15mbit
- 下载150mbit
如果您需要更多信息,我很乐意发送。感谢阅读。
编辑 1
在谷歌搜索我做错了什么之后,我决定尝试稍微改变一下,并想出了这个命令
ffmpeg -re -i rtmp://localhost/(app)/(key) -c:v libx264 -r 50 -g 100 -keyint_min 100 -x264opts "keyint=100:min-keyint=100:no-scenecut" -sws_flags lanczos -profile:v baseline -preset veryfast -vb 6000K -minrate 6000k -maxrate 6000k -bufsize 6000k -s 1280x720 -tune film,zerolatency -pix_fmt yuv420p -f flv -c:a copy -ac 1 -strict normal rtmp://(output site)/(output app)/(output key)
根据我目前的测试,如果我只直接输出到 youtube 直播,这似乎至少有超过 2 分钟的健康流。我找到了我的 nginx 服务器的输出,然后 youtube live 破坏了东西。
我的nginx rtmp设置在这个linkhttps://pastebin.com/siE99Tv8
编辑 2
如果我将流推送到像 restream 这样的网站以将其流式传输到 youtube,那么它似乎可以正常工作。测试了 25 分钟,他们没有说坏视频容器或任何东西。所以我要说 nginx 部分归咎于它如何分发文件?不确定我做错了什么。我很确定至少 ffmpeg 不应该受到指责
YouTube 似乎不喜欢 nginx。我找到了两个解决方案。
解决方案 1
将 "meta copy;" 添加到您的 nginx 配置如下:
rtmp {
server {
listen 1935;
application youtube{
live on;
meta copy;
push rtmp://a.rtmp.youtube.com/live2/(key);
}
}
}
解决方案 2
修改nginx-rtmp-module/ngx_rtmp_codec_module.c,替换一行:
ngx_string("Server"),
和
ngx_string("xtradata"),
然后重新编译nginx。
我一直在尝试将 obs studio 生成的流转码到我的 nginx 服务器并将其发送到 youtube。现在我已经让它与 twitch 一起工作,我知道这些设置实际上大部分都正确地对其进行了转码并且是可见的。问题是 youtube live 将其视为错误的视频设置,并告诉我更改当前的视频容器格式。另一个可能无关的副作用是视频流在 YouTube 上看起来非常糟糕。看起来它是以低比特率和其他东西流式传输的,但真正的问题是糟糕的视频设置错误。
正在使用的ffmpeg命令如下
ffmpeg -i rtmp://localhost/Private/Private1 -vb 6000k -minrate 6000k -maxrate 6000k -bufsize 6000k -s 1280x720 -c:v libx264 -preset faster -r 50 -g 100 -keyint_min 50 -x264opts nal-hrd=cbr:force-cfr=1 -sws_flags lanczos -tune film -pix_fmt yuv420p -c:a copy -f flv -threads 6 -strict normal rtmp://a.rtmp.youtube.com/live2/{key}
我尝试过不同的帧率并在谷歌上搜索了一段时间,但一无所获或错误地解释了所有内容。无论哪种方式,我都会很高兴在这里得到一些帮助。
系统信息。
- OS: Ubuntu 服务器 16.04 LTS
- 内存:10GB
- 处理器:AMD Phenom(tm) II X6 1090T
- 显卡:Geforce GT 520
互联网。
- 上传15mbit
- 下载150mbit
如果您需要更多信息,我很乐意发送。感谢阅读。
编辑 1
在谷歌搜索我做错了什么之后,我决定尝试稍微改变一下,并想出了这个命令
ffmpeg -re -i rtmp://localhost/(app)/(key) -c:v libx264 -r 50 -g 100 -keyint_min 100 -x264opts "keyint=100:min-keyint=100:no-scenecut" -sws_flags lanczos -profile:v baseline -preset veryfast -vb 6000K -minrate 6000k -maxrate 6000k -bufsize 6000k -s 1280x720 -tune film,zerolatency -pix_fmt yuv420p -f flv -c:a copy -ac 1 -strict normal rtmp://(output site)/(output app)/(output key)
根据我目前的测试,如果我只直接输出到 youtube 直播,这似乎至少有超过 2 分钟的健康流。我找到了我的 nginx 服务器的输出,然后 youtube live 破坏了东西。
我的nginx rtmp设置在这个linkhttps://pastebin.com/siE99Tv8
编辑 2
如果我将流推送到像 restream 这样的网站以将其流式传输到 youtube,那么它似乎可以正常工作。测试了 25 分钟,他们没有说坏视频容器或任何东西。所以我要说 nginx 部分归咎于它如何分发文件?不确定我做错了什么。我很确定至少 ffmpeg 不应该受到指责
YouTube 似乎不喜欢 nginx。我找到了两个解决方案。
解决方案 1
将 "meta copy;" 添加到您的 nginx 配置如下:
rtmp {
server {
listen 1935;
application youtube{
live on;
meta copy;
push rtmp://a.rtmp.youtube.com/live2/(key);
}
}
}
解决方案 2
修改nginx-rtmp-module/ngx_rtmp_codec_module.c,替换一行:
ngx_string("Server"),
和
ngx_string("xtradata"),
然后重新编译nginx。