我正在尝试设置 Raspberry Pi,以便它使用 Raspberry Pi 摄像头将视频实时传输到 YouTube,并将视频保存到 SD 卡进行备份,以防互联网断开连接。我使用了 Alex Ellis 的指导进行设置,这基本上是一个任何人都可以下载并设置的 docker 镜像。他设置了 YouTube 直播,但没有离线保存视频。
因此,我修改了他的代码,发现他使用 FFmpeg 流式传输到 YouTube。下面这行代码基本上是他的流式传输方法的核心:
raspivid -o - -t 0 -w 1920 -h 1080 -fps 40 -b 8000000 -g 40 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i pipe:0 -c:v copy -c:a aac -ab 128k -g 40 -strict experimental -f flv -r 30 rtmp://a.rtmp.youtube.com/live2/$1
我阅读了有关 FFmpeg 的资料,显然,要将此流保存到我的 SD 卡,我所需要做的就是将我想要保存视频的目录添加到此代码的末尾。我在行末对其进行了如下修改:
raspivid -o - -t 0 -w 1920 -h 1080 -fps 40 -b 8000000 -g 40 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i pipe:0 -c:v copy -c:a aac -ab 128k -g 40 -strict experimental -f flv -r 30 rtmp://a.rtmp.youtube.com/live2/$1 /home/pi/Desktop/my_video.mp4
但是,当我运行这个程序时,终端抛出了这个错误:
/home/pi/Desktop/my_video.mp4: No such file or directory
但是,这个路径在所有 Raspberry Pi 中都是默认存在的。我不确定这里出了什么问题,有人能帮我解决吗?
附言:作为附加问题,我阅读了 FFmpeg 的文档,其中明确指出在使用实时输入源时不要使用 -re 参数,但 Alex 还是使用它。我应该用其他东西代替它吗?不过现在它工作正常。
答案1
使用 tee 复用器:
raspivid -o - -t 0 -w 1920 -h 1080 -fps 40 -b 8000000 -g 40 | ffmpeg -i - -re -f lavfi -i anullsrc -map 0 -map 1 -c:v copy -c:a aac -f tee "[f=flv]rtmp://a.rtmp.youtube.com/live2/<stream key>|/home/pi/Desktop/my_video.mp4"
附言:作为附加问题,我阅读了 FFmpeg 的文档,其中明确指出在使用实时输入源时不要使用 -re 参数,但 Alex 还是使用它。我应该用其他东西代替它吗?不过现在它工作正常。
- 请勿用于
-re
实时输入。 -strict experimental
ffmpeg
除非你非常老,否则没有必要。- 使用更简单的anullsrc过滤器生成静音音频而不是
/dev/zero
。 - 你的命令是混合
-c:v copy
(流复制) 和视频编码选项。这些是互斥的,因此视频编码选项将被忽略。- 如果您想要重新编码而不是流复制,则删除
-c:v copy
并考虑使用-c:v h264_omx
(如果您的ffmpeg
配置是)--enable-omx-rpi
。 - 如果您想要重新编码,请设置您想要的
fps
,raspivid
而不是在 中更改它ffmpeg
。
- 如果您想要重新编码而不是流复制,则删除
看: