ffmpeg直接输出到HDFS

Output of ffmpeg into HDFS directly

我有一个要求,我必须将 RTSP 流转换为 mp4 视频或帧(视情况而定)并希望将它们保存在 HDFS(Hadoop 文件系统)中。

为此,我尝试使用 ffmpeg 将 RTSP 流转换为 mp4 video/frames 并将 video/frames 保存在本地文件系统中。如下图-
ffmpeg -i rtsp://10.0.37.150:8554/big_bunny.mkv -r 1 -f image2 frames/big_frame-%3d.bmp
ffmpeg -i rtsp://10.0.37.150:8554/big_bunny.mkv big_bunny.mp4

然后使用 put 命令将 video/frames(存储在本地文件系统中)保存到 hdfs -
hadoop fs -put frames/ /user/maddy/
hadoop fs -put big_bunny.mp4 /user/maddy/

这是有效的。但我想直接这样做(即一步完成,无需将所需文件保存在本地文件系统中)

我尝试了一些东西(比如下面的命令)但它不起作用
ffmpeg -i rtsp://10.0.37.150:8554/big_bunny.mkv hdfs://localhost:9000/user/maddy/big_bunny.mp4

我收到这个错误 -
hdfs://localhost:9000/user/maddy/big_bunny.mp4: Protocol not found

那么有什么方法可以使用 ffmpeg 直接将这些文件保存到 hdfs 中,而无需先保存到我的本地文件系统中。
或者有没有其他工具可以实现这一点?

编辑:

尝试过ffmpeg -i rtsp://10.0.37.150:8554/big_bunny.mkv - | hadoop fs -put - /user/maddy/
正如@incBrain

所建议的

但是收到这个错误-
[NULL @ 0xce37a0] Unable to find a suitable output format for 'pipe:' pipe:: Invalid argument

您可以将 ffmpeg 的输出重定向到管道并使用 hadoop fs -put - /user/...read the input from stdin,如下所示:

ffmpeg -i rtsp://10.0.37.150:8554/test.mkv -f avi - | hadoop fs -put - /user/maddy/test.avi

请注意,您将需要 -f <format> option,因为 ffmpeg 由于我们使用管道,无法从文件扩展名猜测输出格式。