FFMPEG:2x2 网格相机流到 Youtube

标签 ffmpeg youtube stream grid

所以这是我的“工作” 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 网格?

最佳答案

每个视频应该占据一半的宽度和一半的高度,因此 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。
  • 关于FFMPEG:2x2 网格相机流到 Youtube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66983033/

    相关文章:

    video - ffmpeg中的两次通过编码

    python - 如何使用 FFMPEG 驱动程序使 opencv 工作

    android youtube api Volley 异常

    java - 从Java中的压缩PDF文件中读取字节

    c# - 为什么我需要在这个序列化片段中刷新并将流位置设置为 0?

    node.js - 使用 NodeJS(带有 Typescript)流和 aes-gcm 算法时出现不支持的状态或无法验证数据错误

    linux - 将经过处理的视频从 OpenCV 传递到 FFmpeg 以进行 HLS 流式传输 (Raspberry PI)

    FFmpeg 比特率问题

    php - WordPress 视频帖子不允许我输入 Youtube 视频 ID

    html - 如何使这个 youtube 视频响应?