【问题标题】:FFMPEG: 2x2 Grid Cameras stream to YoutubeFFMPEG:2x2 网格相机流到 Youtube
【发布时间】:2021-07-03 02:04:36
【问题描述】:

所以这是我的“工作” ffmpeg 命令:

ffmpeg -rtsp_transport tcp -i "input1" -rtsp_transport tcp -i "input2" -rtsp_transport tcp -i "input3" -rtsp_transport tcp -i "input4" -filter_complex "[0:v] setpts=PTS-STARTPTS, scale=480x270 [a0];[1:v] setpts=PTS-STARTPTS, scale=480x270 [a1];[2:v] setpts=PTS-STARTPTS, scale=480x270 [a2];[3:v] setpts=PTS-STARTPTS, scale=480x270 [a3];[a0][a1][a2][a3]xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0[out]" -map "[out]" -map 3:a -video_size 1920x1080 -tune zerolatency -profile:v baseline -level 3.0 -b:v 5000k -vcodec libx264 -preset medium -q:v 3 -crf 15 -r 15 -c:a aac -ac 2 -f flv rtmp://a.rtmp.youtube.com/live2/...

我遇到的问题是 Youtube 将此流识别为仅“360p”,我认为每个流的质量比这些相机的实际质量要差。

是否有什么我做错了,或者因为将其缩放到 2x2 网格而应该像那样“工作”?

【问题讨论】:

  • 四个缩放到 480x270 并以 2x2 堆叠的视频将产生 960x540 的输出。不要缩小它们。
  • 什么意思?我是如何缩小它们的?
  • @Martin 使用scale=480x270,假设输入大于 480x270。您应该始终包含命令中的完整日志,这样我们就不必做出假设。此外,-video_size 1920x1080 不是您的编码器/复用器的有效输出选项,将被忽略。
  • 对不起,我对这些东西不太熟悉,你能告诉我如何显示完整的日志吗?有了这些缩放,我只是想把所有四个摄像头都放在一个屏幕上,它看起来相当不错,没有边框或其他东西。那么我应该设置什么比例?我认为 480x270 和四个视频会产生一个 1920x1080 的大屏幕?
  • “日志”只是 ffmpeg 在终端/控制台中吐出的文本。

标签: ffmpeg youtube stream grid


【解决方案1】:

每个视频应占一半宽度和一半高度,即 960x540:

ffmpeg -rtsp_transport tcp -i "input1" -rtsp_transport tcp -i "input2" -rtsp_transport tcp -i "input3" -rtsp_transport tcp -i "input4" -filter_complex "[0:v] setpts=PTS-STARTPTS, scale=960x540 [a0];[1:v] setpts=PTS-STARTPTS, scale=960x540 [a1];[2:v] setpts=PTS-STARTPTS, scale=960x540 [a2];[3:v] setpts=PTS-STARTPTS, scale=960x540 [a3];[a0][a1][a2][a3]xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0,format=yuv420p[out]" -map "[out]" -map 3:a -c:v libx264 -preset medium -tune zerolatency -b:v 5000k -maxrate 5000k -bufsize 10000k -r 15 -c:a aac -ac 2 -f flv rtmp://a.rtmp.youtube.com/live2/

不相关的变化:

  • 删除了 -video_size 1920x1080,因为它通常是某些解复用器的输入选项。
  • 删除了-q:v 3,因为libx264 忽略了-q:v。请改用-crf-b:v
  • 删除了-crf 15,因为它与-b:v 互斥。这意味着您一次只能使用一个。如果您同时使用两者,那么其中一个将被忽略。对于流式传输,您应该使用 -b:v 而不是 -crf,除非您知道自己在做什么。
  • 删除了-level 3.0。对于 1920x1080,级别 3.0 太低(libx264 会在日志输出中通过“级别限制”警告告诉您这一点)。无论如何,您不需要限制级别。
  • 删除了-profile:v baseline。无需针对 2008 年以来的设备。
  • 添加了格式过滤器format=yuv420p,因此对于色度子采样,输出始终为 YUV 4:2:0。
  • 添加了-bufsize-maxrate 以启用强烈推荐用于流式传输的VBV。

【讨论】:

  • 再次感谢@llogan! :) 几乎所有东西都很好用,你一如既往地乐于助人!
猜你喜欢
  • 2021-04-12
  • 2019-01-09
  • 1970-01-01
  • 2018-07-16
  • 2014-03-31
  • 2012-12-11
  • 2021-03-10
  • 2018-08-06
  • 2017-09-21
相关资源
最近更新 更多