FFMPEG 인트라 프레임 I,P,B 프레임 추출

FFMPEG 인트라 프레임 I,P,B 프레임 추출

FFMPEG 또는 유사한 프로그램에서 인트라 프레임을 추출하고 있는 그대로 보존하는 방법이 있습니까? . -f image2​그러나 그것은 각 프레임의 전체 이미지입니다. 모션 변경 이미지만 내보내고 싶으므로 이미지의 변경되지 않은 영역을 제외하거나 마스킹하여 모션 변화만 표시하는 P 및 B 프레임을 사용합니다.

이것이 가능한가?

내가 사용하는 기본 프레임 내보내기 명령입니다. 이렇게 하면 지정된 FPS에서 각 프레임의 전체 프레임 이미지가 제공됩니다.

ffmpeg -i input.mp4 -r 12 -an -b 1024k -y -f image2 frame%4d.jpg

첫 번째 프레임이 전체 이미지가 되고 다음 프레임은 이미지를 다시 그려야 하는 이미지 데이터만 되는 프레임 폴더를 갖도록 프레임을 내보내고 싶습니다. 두 프레임 사이의 시간적 중복성을 노출합니다. (이것이 I,P,B 프레임이 하는 일이 아닌가요?)

답변1

특정 유형의 프레임을 추출하려면select필터:

select=eq(pict_type\,<x>)

<x>다음 중 하나는 어디에 있습니까?pict_type (video only) the type of the filtered frame, can assume one of the following values: I, P, B, S, SI, SP, BI

예를 들면 다음과 같습니다.

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B)[out]' b.frames.mp4

출력에 대해 더 자세히 이해하려면 다음을 추가하세요.showinfo필터:

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B),showinfo[out]' b.frames.mp4

답변2

P 및 B 프레임에는 일반적으로 변경된 각 영역에 대한 새로운 이미지 데이터가 포함되지 않습니다. 오히려 그림은 다양한 유형의 매크로블록으로 나뉩니다. 일부 유형의 매크로블록에는 새로운 이미지 데이터가 포함되어 있지만 대부분은 다른 참조 사진 및 모션 벡터를 기반으로 내용을 계산합니다.

정확히 귀하가 요청한 내용은 아니지만 색상을 사용하여 각 매크로블록의 유형을 표시합니다.

ffmpeg -debug vis_mb_type -i input.mp4 output.mp4

또는

ffplay -debug vis_mb_type input.mp4

그러면 모션 벡터도 표시됩니다.

ffplay -debug vis_mb_type -vismv 7 input.mp4

각 MB의 색상에 대한 자세한 내용은 다음 링크를 참조하세요.

매크로블록 및 모션벡터 디버그 FFMpeg 문서

관련 정보