ffmpeg로 정지된 비디오를 감지하는 방법이 있습니까? 10초 이상의 정지된 비디오 영역이 상당히 큰 경우에만 알 필요가 있습니다.
나는 ~에 익숙하다흑색 감지필터.
먼저 인접한 프레임의 차이를 확인한 다음 blackDetect를 사용하여 차이가 변경되지 않았는지 확인할 수 있습니까? 그래도 차이점을 수행하는 방법을 잘 모르겠습니다.
답변1
사용동결 감지필터. 4.1 릴리스 브랜치보다 최신이므로 현재 git master 브랜치의 빌드를 사용하세요. 보다FFmpeg 다운로드Linux, macOS, Windows용 빌드 링크 페이지입니다.
예
ffmpeg -i freeze.mp4 -vf "freezedetect=n=-60dB:d=2" -map 0:v:0 -f null -
옵션
noise
(또는n
): 노이즈 허용치를 설정합니다. dB(지정된 값에 "dB"가 추가된 경우) 또는 0과 1 사이의 차이 비율로 지정할 수 있습니다. 기본값은 -60dB 또는 0.001입니다.duration
(또는d
): 알림까지 정지 기간을 설정합니다(기본값은 2초).
예제 출력
lavfi.freezedetect
콘솔 출력의 메타데이터 키를 참조하세요 .
ffmpeg version N-93663-ga42e761b96 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.3.0 (GCC)
configuration:
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 52.100 / 58. 52.100
libavformat 58. 27.103 / 58. 27.103
libavdevice 58. 7.100 / 58. 7.100
libavfilter 7. 49.100 / 7. 49.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'freeze.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:00:28.99, start: 0.000000, bitrate: 1324 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 115:87 DAR 1840:783], 1322 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Metadata:
handler_name : VideoHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.27.103
Stream #0:0(und): Video: wrapped_avframe, yuv420p, 1280x720 [SAR 115:87 DAR 1840:783], q=2-31, 200 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.52.100 wrapped_avframe
[freezedetect @ 0x55f7a55c9800] lavfi.freezedetect.freeze_start: 10.01
[freezedetect @ 0x55f7a55c9800] lavfi.freezedetect.freeze_duration: 13.1381x
[freezedetect @ 0x55f7a55c9800] lavfi.freezedetect.freeze_end: 23.1481
frame= 695 fps=0.0 q=-0.0 Lsize=N/A time=00:00:28.98 bitrate=N/A speed= 40x
video:364kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
결과를 파일로 출력
메타데이터 필터를 결합하여 정지 정보를 얻을 수 있습니다.
ffmpeg -i freeze.mp4 -vf "freezedetect=n=-60dB:d=2,metadata=mode=print:file=freeze.txt" -map 0:v:0 -f null -
결과는 다음과 같습니다 freeze.txt
.
frame:288 pts:288288 pts_time:12.012
lavfi.freezedetect.freeze_start=10.01
frame:555 pts:555555 pts_time:23.1481
lavfi.freezedetect.freeze_duration=13.1381
lavfi.freezedetect.freeze_end=23.1481
참조메타데이터 필터 문서더 많은 옵션을 확인하세요.
답변2
몇 달 전부터 freezedetect
필터가 있습니다.https://ffmpeg.org/ffmpeg-filters.html#freezeDetect