使用 FFmpeg 将视频保存到 SD 卡,同时向 YouTube 直播

使用 FFmpeg 将视频保存到 SD 卡,同时向 YouTube 直播

我正在尝试设置 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 experimentalffmpeg除非你非常老,否则没有必要。
  • 使用更简单的anullsrc过滤器生成静音音频而不是/dev/zero
  • 你的命令是混合-c:v copy流复制) 和视频编码选项。这些是互斥的,因此视频编码选项将被忽略。
    • 如果您想要重新编码而不是流复制,则删除-c:v copy并考虑使用-c:v h264_omx(如果您的ffmpeg配置是)--enable-omx-rpi
    • 如果您想要重新编码,请设置您想要的fpsraspivid而不是在 中更改它ffmpeg

看:

相关内容