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
由于我们使用管道,无法从文件扩展名猜测输出格式。
我有一个要求,我必须将 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
由于我们使用管道,无法从文件扩展名猜测输出格式。