ffmpeg가 포함 된 비디오에서 처음 30 초 동안 로고를 추가하는 방법은 무엇입니까? 된 비디오에서

ffmpeg가 포함 된 비디오에서 처음 30 초 동안 로고를 추가하려고합니다. 라는 비디오 d1.mp4와 로고가 logo.png있습니다.

비디오가 시작되면 워터 마크가 비디오의 왼쪽 상단 또는 오른쪽 상단에 있어야하며 30 초 후에 사라집니다.

추가하는 방법을 알려주시겠습니까?



답변

ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

로고가 알파 채널을 가진 단일 스틸 이미지이고 프레임 속도가 30000/1001 (NTSC 속도) 인 비디오 위에 로고를 오버레이하려고한다고 가정합니다. -framerate입력 비디오가 다른 경우에 일치 하도록를 변경하십시오 . 로고가 비디오 인 경우 생략하십시오 -framerate 30000/1001 -loop 1. 로고에 알파 채널이없는 경우 예를 들어 format=yuva420p,바로 앞에 삽입하여 추가하십시오 fade.

x, y 위치 10,10에 30 초 동안 로고가 표시된 다음 1 초 페이드 아웃됩니다.


답변

overlay비디오 필터 를 사용하여 비디오 에 로고 추가 :

여기에 이미지 설명을 입력하십시오

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

이 명령을 이해하려면 스트림 지정자가 무엇인지 알아야 하며 FFmpeg 필터링 소개를 읽으면 도움이됩니다. [0:v]는 제 1 입력 ( video.mp4) [1:v]의 비디오 스트림을 지칭하고, 제 2 입력 ( logo.mp4) 의 비디오 스트림을 지칭한다 . 이것이 overlay어떤 입력을 사용할지 알려줄 수있는 방법 입니다. 당신은 생략 할 수 있습니다 [0:v][1:v], 그리고 overlay작업 여전히 것이다, 그러나 명시 될 가능성이 알 수없는 기본값에 의존하지하는 것이 좋습니다.

기본적으로 로고는 왼쪽 상단에 배치됩니다.

를 사용 -codec:a copy하면 오디오 가 스트리밍 됩니다 . 이것은 단순히 오디오를 다시 인코딩하는 대신 오디오를 리 뮤싱합니다. 오디오의 “복사하여 붙여 넣기”로 생각하십시오.

로고 이동

이 예제는 로고를 오른쪽으로 10 픽셀, 아래로 10 픽셀 아래로 이동합니다.
여기에 이미지 설명을 입력하십시오

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

이 예제는 로고를 오른쪽에서 10 픽셀, 10 픽셀 아래로 이동합니다.

여기에 이미지 설명을 입력하십시오

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_w“주”입력의 너비 (배경 또는 [0:v]), overlay_w“오버레이”입력의 너비 (로고 또는 [1:v])를 나타냅니다. 따라서이 예에서는 overlay=320-90-10:10또는 로 변환 될 수 있습니다 overlay=220:10.

오버레이 타이밍

일부 필터는 타임 라인 편집 을 처리 하여 산술 표현식 을 사용하여 필터 적용시기를 결정할 수 있습니다. 참조 ffmpeg -filters지원 타임 라인 편집 필터 확인할 수 있습니다.

이 예는 30 초까지 로고를 표시합니다.

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

로고를 흐리게 하려면 mark4o ‘s answer를 참조하십시오 .


답변