FFmpeg/AVconc - 원활한 비디오 캡처

FFmpeg/AVconc - 원활한 비디오 캡처

지속적으로 비디오를 캡처하고 싶은 IP 캠이 여러 개 있습니다. 다양한 RTSP 소스에서 캡처하기 위해 ffmpeg를 래핑하는 스크립트를 작성 중입니다. 그런데 데이터를 어떻게 캡처하고 저장해야 할지 고민이 됩니다. 구체적으로 어떻게 하면 원활한 클립을 캡처할 수 있나요?

명확히 하기 위해 다음과 같은 명령을 실행하면 다음과 같습니다.

ffmpeg -i rtsp://ip_cam file.mp4

이것은 내 하드 드라이브가 가득 찰 때까지(또는 ffmpeg 또는 파일 시스템의 상한선에 도달할 때까지) 영원히 실행될 것입니다. 그래서 내 생각은 다음과 같이하는 것이 었습니다.

ffmpeg -i rtsp://ip_cam -fs 104857600 file-1.mp4

이렇게 하면 파일이 각각 100MB로 제한됩니다. 내 래퍼 스크립트는 이 인스턴스가 완료되자마자 새 인스턴스를 시작할 수 있습니다.

ffmpeg -i rtsp://ip_cam -fs 104857600 file-2.mp4

기타 등등(공간을 복구하기 위해 필요에 따라 이전 파일을 지우는 별도의 프로세스를 가질 수 있습니다). 이 접근 방식의 문제점은 ffmpeg를 시작하는 데 1~2초가 걸린다는 것입니다.이는 해당 시간 동안 문제의 카메라가 아무것도 녹화하지 않는다는 의미입니다..

고려해야 할 한 가지 추가 사항은 각 파일에 대해 시작 및 중지 타임스탬프를 알아야 한다는 것입니다. 예를 들어 file-1.mp4"2015-09-12 09:03:42"부터 "2015-09-12 11:24"까지 참조할 수 있습니다. 21". 이렇게 하면 사용자가 특정 클립을 검색하려는 경우 이를 어디서 얻을 수 있는지 알 수 있습니다. 그리고 각 클립에 대해 ffmpeg를 시작한 다음 각 클립의 끝에서 끝나면 해당 정보를 캡처하고 저장할 수 있습니다. 그러나 제안된 접근 방식이 출력을 별도의 청크로 저장하면서 ffmpeg에 무기한 실행하도록 지시하는 것이라면(ffmpeg가 그렇게 할 수 있는 경우) 이 정보를 수집할 수 없기 때문에 작동하지 않을 수 있습니다.

어떤 통찰력이라도 감사하겠습니다.

답변1

시도해 보세요세그먼트 다중화기.

ffmpeg -i rtsp://ip_cam -c copy -f segment -segment_list out.list -segment_time 900 \
-segment_atclocktime 1 -strftime 1 "%Y-%m-%d_%H-%M-%S.mkv"
  • -segment_list목록 파일을 생성합니다.

  • -segment_time세그먼트 기간을 설정합니다. 값은 기간 사양이어야 합니다. 기본값은 2입니다. 지정된 시간에 참조 스트림 키 프레임을 강제로 적용하지 않으면 분할이 정확하지 않을 수 있습니다. 참조세그먼트 다중화기 문서더 많은 정보를 위해서.

  • -segment_atclocktime"1"로 설정하면 00:00시부터 시작하여 정규 시계 시간 간격으로 분할됩니다. 에 지정된 시간 값은 -segment_time분할 간격의 길이를 설정하는 데 사용됩니다. 예를 들어, Segment_time을 "900"으로 설정하면 12시, 12시 15분, 12시 30분 등에 파일을 생성하는 것이 가능해집니다.

  • -strftime이를 통해 파일 생성 시간에 따라 세그먼트 이름을 지정할 수 있습니다.

출력 파일 이름 예시:

$ ls -m1
2015-09-12_14-10-02.mkv
2015-09-12_14-10-14.mkv
2015-09-12_14-10-24.mkv
2015-09-12_14-10-34.mkv
2015-09-12_14-10-44.mkv
2015-09-12_14-10-54.mkv

참조문서더 많은 옵션과 정보를 확인하세요.

관련 정보