ffmpeg直接输出到hdfs

hec6srdp  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(546)

我需要将rtsp流转换成mp4视频或帧(视情况而定)&希望将它们保存在hdfs(hadoop文件系统)中。
为此,我尝试使用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

3lxsmp7m

3lxsmp7m1#

可以重定向的输出 ffmpeg 到一个管道和使用 hadoop fs -put - /user/... 从中读取输入 stdin 这样地:

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

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

相关问题