비디오가 완전히 다운로드되었는지 확인하는 방법은 무엇입니까?

비디오가 완전히 다운로드되었는지 확인하는 방법은 무엇입니까?

동영상이 여러 개 있는데 동영상이 완성되었는지 확인하고 싶습니다. 그 중 일부는 부분적으로 다운로드될 수 있지만 버그가 없습니다. 이러한 비디오가 완전히 다운로드되었는지 효과적으로 확인하는 방법은 무엇입니까?

링크가 있으면 크기를 확인하겠지만 그렇지 않습니다.

나는 ffprobe및 를 사용해 보았습니다 mediainfo. ffprobe부분적으로 다운로드한 파일의 사소한 문제를 보고하지만 완전히 다운로드한 파일의 일부 유사한 문제도 보고합니다. ffmpeg전체 파일을 읽고 동영상의 길이를 비교하여 다운로드되었는지 확인해야 하나요 ? 더 나은 해결책이 있습니까?

답변1

ffmpeg비디오 파일이 완전히 다운로드되었는지 확인하는 운영 체제 독립적 도구입니다. 아래 명령은 ffmpeg입력 비디오를 읽고 비디오를 null로 인코딩하도록 지시합니다. 인코딩 중에 오류(예: 프레임 삭제)가 test.log에 출력됩니다.

ffmpeg -v error -i FILENAME.mp4 -f null - 2>test.log

비디오 파일이 완전히 다운로드되지 않으면 test.log 파일에 많은 줄이 있을 것입니다. 예를 들어 비디오 파일에 0.1MB가 없으면 71줄 오류가 발생합니다. 비디오가 완전히 다운로드되고 손상되지 않은 경우 오류가 발견되지 않으며 test.log에 어떤 줄도 인쇄되지 않습니다.


편집하다

위 예시에서는 제가 다운로드한 테스트 영상이 토렌트여서 파일 전체에서 청크가 누락될 수 있기 때문에 전체 파일을 테스트했습니다.

매개변수 목록에 추가하면 -sseof -60파일의 마지막 60초를 확인하므로 훨씬 빠릅니다.

ffmpeg -v error -sseof -60 -i FILENAME.mp4 -f null - 2>test.log

최신 버전의 ffmpeg가 필요합니다. 2.8에는 sseof 플래그가 없으므로 3.0을 사용했습니다.

답변2

미디어 정보라인을 표시합니다:

Truncated: Yes

형식 사양에 따라 파일이 예상대로 완성되지 않은 경우.

잘못된(비호환 파일 경계 사양) 혼합 파일과 부분적으로 다운로드된 파일은 기술적으로 차이가 없으므로, 잘못된 파일과 부분적으로 다운로드된 파일을 구별하는 것은 기술적으로 불가능합니다.

.mp4 파일의 인덱스를 읽고 마지막 프레임의 파일 오프셋 + 프레임 크기가 가져오는 파일의 파일 크기 내에 있는지 확인하는 것과 같은 또 다른 (고급) 테스트를 수행할 수 있지만 이는 정확히 원하는 것이 아닙니다. (포스터와 같이 파일 끝에 소스 파일에 메타데이터가 있고 해당 포스터 앞에서 파일이 잘린 경우 부분 다운로드는 여전히 각 경우에 감지되지 않습니다.) MediaInfo에는 구현되지 않았지만 추가할 수 있습니다.MediaInfo 기능 요청.

모든 경우에 대부분의 비디오 파일 형식에는 전체 파일 크기가 표시되지 않기 때문에 모든 부분 다운로드를 감지하는 것이 어렵습니다. 따라서 파일이 잘렸다는 것을 확신할 수 있지만 파일이 잘리지 않았다는 것을 확신할 수는 없습니다. 전체 파일이 다운로드되었는지 확인하는 유일한 방법은 다른 곳에서 파일 크기를 가져오는 것입니다(더 나은 방법: MD5와 같은 해시를 갖는 것).

추신: 이 질문은 운영 체제에만 국한되지 않습니다.

답변3

-sseof -60을 사용하는 ffmpeg(v3.1.1)에 경고가 표시되지 않고 문제가 있다는 표시 없이 종료되는 파일이 있습니다. Mediainfo는 잘리는 파일도 표시하지 않습니다. -sseof -60을 생략해야만 ffmpeg의 오류가 보고됩니다. 그래서 돌아가서 ffprobe를 시도했습니다. ffmpeg보다 약간 빠른 것 같습니다.

ffprobe -v error -count_frames -i filename.mp4

이 출력을 생성했습니다

[h264 @ 00000000004e6a60] Invalid NAL unit size.
[h264 @ 00000000004e6a60] Error splitting the input into NAL units.
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000000004e5280] stream 1, offset 0x1350135: partial file

OP에서 보고한 대로 오탐(false positive)이 발생하지 않았습니다.

편집하다: ffprobe는 내 테스트 파일에서 ffmpeg보다 약 10% 빠르지만 모든 코어에 대해 "-threads 0" 옵션을 사용하도록 지시한 경우에만 해당됩니다. 그렇지 않으면 하나의 코어/스레드만 사용하므로 속도가 느려집니다.

관련 정보