FTP를 통해 로컬 서버에 .mp4 파일을 저장하는 Reolink 보안 카메라가 있습니다. 그런 다음 해당 비디오를 처리하는 Python 기반 애플리케이션을 갖게 되었습니다. Python 콘솔(OpenCV의)에서 "헤더 읽기 오류"에 대한 경고를 자주 발견했지만 지난 1년 동안 잘 작동했지만 어쨌든 작동했기 때문에 무시했습니다.
새 서버를 구입하고 모든 소프트웨어를 다시 설치하면(이는 Debian Linux, Python 및 OpenCV의 업데이트 버전을 의미함) 더 이상 오류를 용납하지 않고 해당 비디오를 로드하지 못합니다. 걱정스럽게도 FTP를 통해 저장된 비디오 중 약 4개 중 1개는 내 Python 앱에서 이 오류를 표시하며 내 서버나 내 (Mac) 노트북에서 FFMPEG를 통해 로드하려고 하면 오류가 발생합니다.[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7ff492000400] error reading header [path]: Operation not permitted
다음과 같은 동영상을 Dropbox에 올려 놓았습니다.https://www.dropbox.com/s/tu4ddegh6yn05nu/ErrorReadingHeader.mp4?dl=0
이 문제의 원인이나 해결 방법을 아는 사람이 있나요? 몇 가지 옵션이 있지만 그 중 하나를 진행하기에는 정보가 충분하지 않은 것 같습니다.
- 동영상이 손상되지 않도록 수정하세요. 제조업체인 Reolink에 어떤 정보를 밝힐 수 있는지 문의했습니다.
- FFMPEG 등이 오류를 허용하도록 만듭니다. 방법을 잘 모르겠습니다... OpenCV가 어떤 코덱을 사용하고 있는지도 잘 모르겠습니다(확실히 FFMPEG가 아니라는 것을 알고 있으므로 이 헤더에 만족하지 않는 코덱이 두 개 이상 있습니다!)
- 처리하기 전에 동영상을 '복구'해 보세요. 해결책으로 여기에 약간의 마일리지가 있을 수 있지만 매우 비효율적이므로 가능하면 피하는 것이 좋습니다... 하지만 최종 수단으로 존재합니다!
정말 감사합니다!
답변1
샘플 MP4는 조각화되어 있으므로 샘플, 즉 프레임에 대한 전역 인덱스를 갖는 대신 메타데이터가 조각별로 존재합니다. 각 조각의 메타데이터에는 trun
조각 내의 모든 샘플에 대한 데이터가 포함된 트랙 실행 상자가 있습니다 . 2017년 10월(ffmpeg 4.0+)에 변경 사항이 있었습니다. 여기서 trun box가 조각 내에 0개의 샘플이 저장되어 있음을 나타내는 경우 ffmpeg가 구제됩니다.
mp4box 또는 이전 버전의 ffmpeg는 실패하지 않으므로 파일을 일반 MP4로 다시 다중화하는 데 사용할 수 있습니다.
ffmpeg-3.4 -i in.mp4 -c copy out.mp4
또는
mp4box -add in.mp4 -new out.mp4