直接将ffmpeg输出到HDFS

时间:2016-06-29 10:37:41

标签: hadoop video ffmpeg hdfs rtsp

我有一个要求,我必须将RTSP流转换为mp4视频或帧(视情况而定)&想要将它们保存在HDFS(Hadoop Filesystem)中。

为此,我尝试使用ffmpeg将RTSP流转换为mp4视频/帧&将视频/帧保存在本地文件系统中。如下 -
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命令将视频/帧(存储在本地文件系统中)保存到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

1 个答案:

答案 0 :(得分:1)

您可以将hadoop fs -put - /user/...的输出重定向到管道并使用ffmpeg -i rtsp://10.0.37.150:8554/test.mkv -f avi - | hadoop fs -put - /user/maddy/test.avi read the input from stdin,如下所示:

ffmpeg

请注意,您需要-f <format> option,因为{{1}}无法从文件扩展名中猜出输出格式,因为我们使用了我们的管道。

相关问题