움직이는 객체에 ffmpeg 필터를 적용하는 방법은 무엇입니까?

움직이는 객체에 ffmpeg 필터를 적용하는 방법은 무엇입니까?

모든 프레임(얼굴)의 일부를 흐리게 처리하려는 비디오가 있습니다. 나는 얼굴 경계 상자의 좌표를 가지고 있으며 이는 모든 프레임마다 변경될 수 있습니다.

문서를 자세히 살펴본 후 이를 수행하는 방법은 일련의 필터를 적용하는 것임을 이해했습니다.

  • 부품을 잘라내는 자르기 필터
  • 자른 비디오를 흐리게 합니다.
  • 잘리고 흐린 비디오를 원래 위치에 오버레이합니다.
ffmpeg -i input_video.mp4 -filter_complex "[0]crop=200:200:60:30[cropped];[cropped]avgblur=10[croppedblurred];[0][croppedblurred]overlay=60:30" output_video.mp4

이는 비디오를 통해 변경되지 않는 경계 상자 좌표에 적합합니다. 프레임마다 변경될 수 있는 경계 상자 위치에 대해 어떻게 이 작업을 수행할 수 있습니까?

답변1

타임스탬프를 알고 있는 경우 trim필터를 사용하여 입력 비디오의 특정 기간 동안 필요한 필터 체인을 설정할 수 있습니다. 아래 예에서는 10초마다 세 가지 다른 필터 체인을 설정합니다. 기억해야 할 것은 [ ]의 모든 단계 에서 다른 이름을 사용하는 것입니다 -filter_complex.

ffmpeg -i input.mp4 -filter_complex ^
 ^"[0:v]trim=start=0:end=10[a]; ^
   [0:v]trim=start=10:end=20,setpts=PTS-STARTPTS[b]; ^
   [0:v]trim=start=20,setpts=PTS-STARTPTS[c]; ^
   [a] here insert your chain of filters for this part of video [aa]; ^
   [b] here insert your chain of filters for this part of video [bb]; ^
   [c] here insert your chain of filters for this part of video [cc]; ^
   [aa][bb]concat[aaa]; ^
   [aaa][cc]concat[video]^" ^
 -map [video]:v -map 0:a -c:v libx264 -crf 18 -c:a copy output.mp4

답변2

프로그래밍 없이 "수동으로" 해결하는 것은 실용적이지 않다고 생각합니다.
이론적으로는 다음을 사용할 수 있습니다.발현 평가프레임 번호 또는 프레임 시간에 따라 x및 좌표를 설정합니다 .y


합성 패턴 구축(데모용):

ffmpeg -y -f lavfi -r 10 -i testsrc=size=192x108:rate=1:duration=300 -vf setpts=N/10/TB -vcodec libx264 -pix_fmt yuv444p -crf 17 input_video.mp4

프레임 번호에 따라 흐린 영역을 배치하는 예:

ffmpeg -y -i input_video.mp4 -filter_complex "[0]avgblur=10,crop=50:50:'if(lte(n,100), n+10, if(lte(n,200), 210-n, 10))':'if(gte(n,100), 5+(n-100)/5, 5)'[blurredcropped];[0][blurredcropped]overlay='if(lte(n,100), n+10, if(lte(n,200), 210-n, 10))':'if(gte(n,100), 5+(n-100)/5, 5)':format=yuv444" -vcodec libx264 -pix_fmt yuv444p -crf 17 output_video.mp4

샘플 출력(애니메이션 gif로 변환):
여기에 이미지 설명을 입력하세요

관련 정보