복붙노트

[HADOOP] ffmpeg를 HDFS로 직접 출력

HADOOP

ffmpeg를 HDFS로 직접 출력

RTSP 스트림을 mp4 비디오 또는 프레임 (경우에 따라)으로 변환하고 HDFS (Hadoop Filesystem)에 저장 해야하는 요구 사항이 있습니다.

이를 위해 RTSP 스트림을 mp4 비디오 / 프레임으로 변환하고 비디오 / 프레임을 로컬 파일 시스템에 저장하기 위해 ffmpeg를 사용했습니다. 아래처럼- ffmpeg -i rtsp : //10.0.37.150 : 8554 / big_bunny.mkv -r 1 -f image2 프레임 /big_frame-%3d.bmp ffmpeg -i rtsp : //10.0.37.150 : 8554 / big_bunny.mkv big_bunny.mp4

그리고 put 명령을 사용하여 비디오 / 프레임 (로컬 파일 시스템에 저장된)을 hdfs에 저장 hadoop fs -put 프레임 / / 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 : 프로토콜을 찾을 수 없음

ffmpeg를 사용하면 로컬 파일 시스템에 먼저 저장하지 않고 이러한 파일을 hdfs에 직접 저장할 수있는 방법이 있습니까? 아니면 이것을 달성 할 수있는 다른 도구가 있습니까?

편집하다 :

시도한 ffmpeg -i rtsp : //10.0.37.150 : 8554 / big_bunny.mkv-| hadoop fs -put-/ user / maddy / @incBrain이 제안한대로

그러나이 오류가 발생했습니다- [NULL @ 0xce37a0] 'pipe :'에 적합한 출력 형식을 찾을 수 없습니다. 파이프 :: 잘못된 인수

해결법

  1. ==============================

    1.ffmpeg의 출력을 파이프로 리디렉션하고 hadoop fs -put-/ user / ...를 사용하여 stdin에서 다음과 같이 입력을 읽을 수 있습니다.

    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
    

    파이프를 사용하기 때문에 ffmpeg가 파일 확장자에서 출력 형식을 추측 할 수 없으므로 -f 옵션이 필요합니다.

  2. from https://stackoverflow.com/questions/38097146/output-of-ffmpeg-into-hdfs-directly by cc-by-sa and MIT license