【问题标题】:Output of ffmpeg into HDFS directlyffmpeg直接输出到HDFS
【发布时间】:2016-11-01 00:24:12
【问题描述】:

我有一个要求,我必须将 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

【问题讨论】:

  • 你可以试试这个:ffmpeg -i rtsp://10.0.37.150:8554/big_bunny.mkv - | hadoop fs -put - /user/maddy/
  • @incBrain 试过了,但它也不起作用..用运行上述命令后出现的错误编辑了问题。
  • 嗯然后ffmpeg -i rtsp://10.0.37.150:8554/big_bunny.mkv pipe:1 | hadoop fs -put - /user/maddy/ 应该这样做。我希望。如果没有,也许使用> 重定向到命名管道可能是一个解决方案。
  • @incBrain 不,它也不起作用。我也没有尝试重定向到命名管道,因为我不知道。
  • @incBrain 这是工作 ffmpeg -i rtsp://10.0.37.150:8554/test.mkv -f avi pipe: | hadoop fs -put - /user/maddy/test.avi 。缺少-f 参数,该参数指定要解码的视频格式。虽然当我给-f mp4 时它不起作用。顺便说一句,谢谢你的帮助!!

标签: hadoop video ffmpeg hdfs rtsp


【解决方案1】:

您可以将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 无法从文件扩展名中猜出输出格式,因为我们使用我们的管道。

【讨论】:

  • 我们可以不在本地系统中安装Hadoop并且需要推送到远程HDFS吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 2021-09-07
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多