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의 색상에 대한 자세한 내용은 다음 링크를 참조하세요.