我有一个要求,我必须将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
答案 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}}无法从文件扩展名中猜出输出格式,因为我们使用了我们的管道。