태그 보관물: imagemagick

imagemagick

FFmpeg / ImageMagick으로 MP4에서 선명하고 깨끗한 썸네일 가져 오기 가장 가까운 키 프레임을 찾는 FFmpeg 명령

나의 궁극적 인 목표는 30 분 또는 1 시간 길이의 비디오에서 의미있는 스냅 샷을 얻는 것입니다. “의미”는 다소 야심적이므로 요구 사항을 단순화했습니다.

이미지가 선명하지 않아야합니다.

처음에는 이것이 “키 프레임”을 얻는 것을 의미한다고 생각했습니다. 많은 키 프레임이 있기 때문에 비디오의 3 분에 가장 가까운 키 프레임을 선택하기로 결정했습니다. 나는 3 분에 가장 가까운 키 프레임을 찾는 FFmpeg 명령 에서 조언을 따랐다.

그러나 문제는 이러한 키 프레임이 종종 (항상 그런 것은 아님) 흐릿하다는 것입니다. 예를 들면 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

그런 다음 FFmpeg사용하는 비디오의 의미있는 축소판을 사용하여 보다 의미있는 스냅 샷을 얻는 데 도움이되었지만 여전히 위와 같은 프레임이 흐려졌습니다.

이러한 종류의 이미지는 본질적으로 2 개의 서로 다른 장면이 겹치는 것을 알 수 있습니다. 그러나 때로는 다음과 같은 이미지가 나에게 적합합니다.

여기에 이미지 설명을 입력하십시오

위의 이미지는 그다지 의미가 없지만 선명합니다.

이상적으로는 흐린 프레임을 반환하지 않도록 FFmpeg하고 싶습니다. 또는 스크립트를 사용하여 모호한 프레임을 감지하고 5 프레임 중 가장 모호한 것을 선택하고 싶습니다. 누구든지 이것을하는 방법을 알고 있습니까?



답변

“의미”는 매우 주관적이지만 “흐리게”는 상당히 객관적이고 감지하기 쉽습니다.

나는 비슷한 문제가 있었고 약간의 연구 끝에 다음 알고리즘으로 끝났습니다.

  • 비디오 파일 길이를 초 단위로 결정하십시오.
  • ffmpeg 및 장면 변경 감지를 사용하여 다음과 같은 10 가지 PNG 축소판을 생성하십시오.

    ffmpeg -ss {$skip} -i {$input} -vf "select=gt(scene\,0.3)" -r 1 -frames:v 1 {$output}
    

각 반복 $skip에서 비디오 길이 (초)가 10 % 증가합니다. 0.3 파라미터는 가장 적합하지는 않지만, arround로 재생할 수 있습니다. 이로 인해 겹치는 장면 및 / 또는 완전히 흐린 이미지의 문제가 해결되었습니다.

  • ImageMagick으로 더 나은 성능을 위해 10 개의 썸네일 가장자리를 감지하고 축소하십시오.

    convert {$input} -thumbnail {$w}x{$h} -colorspace Gray -edge 1 {$path_to_downscaled_image}
    

-thumbnail이미지 크기를 조정하는 데 사용 하고 있습니다. 그런 다음 흑백 필터를 추가합니다. 마지막으로 반지름이 1 인 가장자리 감지를 수행합니다. 이렇게하면 가장자리가 흰색으로 표시된 흑백 이미지 만 생성됩니다. 즉, 이미지의 흰색이 많을수록 가장자리가 더 커집니다. 다음과 같은 것을 얻을 것입니다 :

여기에 이미지 설명을 입력하십시오

  • ImageMagick으로 흑백 이미지를 식별하십시오.

    identify -format '{$format}' {$path_to_downscaled_image}
    

관심을 가져야 할 것은 % [mean] 및 % [standard-deviation]입니다. 그와 함께 arround를하고 가장 적합한 것을 참조하십시오. 예를 들어 “% [mean] + % [standard-deviation]”을 기준으로 결과 이미지를 모두 정렬하십시오. 크기 조정 및 필터링을 시작하기 전에 동일한 이미지를 찾으십시오.

  • 마지막으로 가장 “엣지있는”것을 고르고 원본을 찾아 다시 선택적으로 변환하십시오.

    convert {$input} -thumbnail {$w}x{$h} -adaptive-sharpen 1.25x0.75 {$final_output}
    

나는 -adaptive-sharpen그것이 동일한 가장자리 주위에서만 이미지를 선명하게하기 때문에 최종 결과에 실제로 도움이 된다는 것을 알았습니다 . 다른 기하학을 시험 해보고 원래 해상도의 1/4로 축소 할 때 1.25×0.75가 가장 효과적이라는 것을 알았습니다.

PHP 에서이 작업을 수행했으며 12 분 영화를 실행하는 데 약 25 초가 걸립니다.

도움이 되었기를 바랍니다.


답변