我有一个要求,我必须将 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 中,而无需先保存在本地文件系统中。
或者还有其他工具可以帮助我实现这一目标吗?
EDIT :
Tried 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/...
to 读取输入stdin https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#put像这样:
ffmpeg -i rtsp://10.0.37.150:8554/test.mkv -f avi - | hadoop fs -put - /user/maddy/test.avi
请注意,您将需要-f <format> option https://ffmpeg.org/ffmpeg.html#Main-options since ffmpeg
由于我们使用管道,因此无法从文件扩展名猜测输出格式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)