
모든 프레임(얼굴)의 일부를 흐리게 처리하려는 비디오가 있습니다. 나는 얼굴 경계 상자의 좌표를 가지고 있으며 이는 모든 프레임마다 변경될 수 있습니다.
문서를 자세히 살펴본 후 이를 수행하는 방법은 일련의 필터를 적용하는 것임을 이해했습니다.
- 부품을 잘라내는 자르기 필터
- 자른 비디오를 흐리게 합니다.
- 잘리고 흐린 비디오를 원래 위치에 오버레이합니다.
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