Not*_*Bot 6 video ffmpeg h.264
使用FFmpeg录制直播流。
实际上,它是一个平台,某人可以在其中进行直播(相机或屏幕),其他人可以以视图的形式加入流。
直播的人可以选择录制该直播。FFmpeg正在使用录制流。
正在以文件格式记录流WEBM。
问题是 FFmpeg 抛出错误。
WebM 仅支持 VP8 或 VP9 或 AV1 视频以及 Vorbis 或 Opus 音频和 WebVTT 字幕。
无法为输出文件 #0 写入标头(编解码器参数不正确?):参数无效
记录流的命令如下。
ffmpeg -loglevel debug -protocol_whitelist pipe udp rtp
-fflags+genpts -f sdp -i pipe:0 -map 0:v:0 -c:v copy
-map 0:a:0 -strict -2 -c:a copy -flags +global_header 1234_VIDEO_1671647432529.webm
Run Code Online (Sandbox Code Playgroud)
| 服务 | 版本 |
|---|---|
| 服务器(EC2) | AWS Linux 2 |
| FFmpeg版本 | 4.3.2-静态 |
注意:两周前,同一个命令正在运行。
您的视频和音频标志均设置为copy:
-c:v copy -c:a copy...这意味着ffmpeg将直接从(可能是管道输入的 RTP)获取视频和音频数据,并尝试将它们直接保存到输出 WebM 文件中。
...在这种情况下,您的 RTP 流包含与 WebM 不兼容的视频或音频(或两者)轨道/流。
ffmpeg不会在启动时预先验证您的命令行,而是 ffmpeg 会盲目地遵循您的指示,因此您不会得到“WebM 仅支持 VP8 或 VP9 或 AV1 视频和 Vorbis 或 Opus 音频和 WebVTT 字幕”的信息。错误消息,直到您的输入流开始包含无法使用copy.
ffmpeg 不会验证指定的编码器是否可以转换选定的流,或者转换后的流是否在输出格式中可接受。这通常也适用:当用户手动设置编码器时,流选择过程无法检查编码流是否可以复用到输出文件中。如果不能,ffmpeg 将中止并且所有输出文件将无法处理。
解决方案是为音频和视频指定与 WebM 兼容的编解码器。
不幸的是,如果输入流已经使用与输出文件格式兼容的编解码器,似乎没有办法让 ffmpeg有条件地选择或copy重新编码(使用等)。-c:v libvpx
ffprobe来检测文件的格式,然后ffmpeg根据该格式指定编解码器。...因此,尝试这个命令行(为了可读性添加了换行符):
ffmpeg
-loglevel debug
-protocol_whitelist pipe udp rtp
-fflags+genpts
-f sdp
-i pipe:0
-map 0:v:0
-c:v libvpx-vp9 -crf 30 -b:v 0
-map 0:a:0
-strict -2
-c:a libvorbis
-flags +global_header
-f webm
1234_VIDEO_1671647432529.webm
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我感觉-map 0:v:0和-map 0:a:0选项可以被删除,因为 ffmpeg 默认情况下会选择第一个音频流和第一个视频流,并且该-strict -2标志似乎是一个货物崇拜用途,用于强制将 Opus 音频放入 MPEG-4 容器中 -您可以使用它如果您使用 WebM 作为容器格式,则不需要...所以请考虑使用这个更简单的版本:
ffmpeg
-loglevel debug
-protocol_whitelist pipe udp rtp
-fflags+genpts
-f sdp
-i pipe:0
-c:v libvpx-vp9 -crf 30 -b:v 0
-c:a libvorbis
-flags +global_header
-f webm
1234_VIDEO_1671647432529.webm
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2925 次 |
| 最近记录: |