실행(플레이) 창 크기, 창 시작점 구하기 - ffmpeg 로 원하는 영역만큼만 녹화해보자
UGameViewportClient* Viewport = GetWorld()->GetGameViewport();
FVector2D pos = Viewport->GetWindow()->GetPositionInScreen(); //시작점. 전체 화면일 경우 -8, -8로 나왔다.(Win10)
FVector2D WH = Viewport->GetWindow()->GetViewportSize(); //실행창 크기. 위에 타이틀 바가 있다면 그 크기도 포함
ffmpeg라는 동영상 프로그램을 사용하기 위해 위의 값들이 필요했다.
원하는 위치부터 원하는 사이즈 만큼
인자 값들을 넣기 위해 아래처럼 스트링을 만들어 영상 캡쳐가 성공했다.
int X = 0; //ffmpeg에 들어갈 인자 값들이 int가 아니면 작동 안한다.
int Y = 0;
int Width = 0;
int Height = 0;
//가로축 컨트롤 + width
if (pos.X < 0) //인자값 중 -offset_x 값이 -(음수)여도 동작 안한다.
{
X = 0;
Width = WH.X + pos.X * 2; //더해진 만큼 좌우 값을 빼준다. pos.X가 -이므로
}
else
{
X = pos.X;
Width = WH.X;
}
//세로축 컨트롤 + Height
if (pos.Y < 0) //인자값 중 -offset_y 값이 -(음수)여도 동작 안한다.
{
Y = 0;
Height = WH.Y + pos.Y * 2; //더해진 만큼 좌우 값을 빼준다. pos.Y가 -이므로
}
else
{
Y = pos.Y;
Height = WH.Y;
}
//아래 코드는 ffmpeg를 실행하기 위한 코드
FString FilePath = FPaths::ConvertRelativePathToFull(FPaths::Combine(*FPaths::GameDir(), TEXT("Plugins/ThirdParty/ffmpeg/"), TEXT("ffmpeg.exe")));
FString Args = FString::Printf(TEXT("-f gdigrab -offset_x %d -offset_y %d -video_size %dx%d -i desktop -r 24000/1001 -q 1 -vf crop %s"), X, Y, Width, Height, *Filename); //Filename은 인자로 받아온 저장될 파일 이름, 해상도는 -video_size 1024x768 이런 식으로 들어가야 함.
FString Cmd = FString::Printf(TEXT("%s %s %s"), *FilePath, *Args, *Filename);
TRACE("%s", *Cmd);
if (FPaths::FileExists(FilePath))
{
RecordHandle = FPlatformProcess::CreateProc(*FilePath, *Args, false, true, false, nullptr, 0, nullptr, nullptr);
}
'공부 > Unreal4' 카테고리의 다른 글
언리얼4 HTML5 Build 시도... (0) | 2017.04.27 |
---|---|
Character(Pawn) Move Control(Not Possess) - AddMovementInput 함수에 대해 (0) | 2017.04.20 |
키맵핑(바인딩) 삭제 - PlayerInput 비우기, InputComponent 비우기 (0) | 2017.04.19 |
언리얼4 c++프로그래밍 - 키맵핑(바인딩) 설정 (0) | 2017.04.17 |
언리얼 c++프로그래밍 - Controller의 Possess()함수에 대해 (0) | 2017.04.17 |