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


9

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

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

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


내 비디오 이름은 d1.mp4이고 내 로고 이름은 logo.png입니다. 감사합니다.
iwocan

그렇다면 무엇을 ffmpeg -i d1.mp4 -i logo.png보여줍니까? 해당 명령을 입력하고 출력이 무엇인지 알려주십시오. 에 대한 질문을 ffmpeg할 때는 항상 가지고있는 비디오 / 오디오 자료, 이미 시도한 것, 시도한 모든 것의 전체 명령 줄 출력에 대해 가능한 많은 세부 정보를 포함해야합니다.
slhck December

여기 내 cmd 화면에 표시되는 내용이 있습니다. pastebin.com/bPCnhXh2
iwocan

답변:


13
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 초 페이드 아웃됩니다.


1
매우 흥미로운! 당신은 설명 할 수있는 이유 framerateloop이 경우가 아니라 페이드 필터가없는 단순한 오버레이가 필요합니까?
Rajib

mark40 감사합니다. 그러나이 코드를 작성할 때 cmd 화면이 멈추지 않습니다. 왜 그런지 모르겠지만 작동하지 않습니다 ..
iwocan

안녕하세요 LordNeckbeard, 여기에 스크린 샷이 있습니다 .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan

1
@ iwocan Windows 프롬프트에서 내용을 복사 할 수 있다고 생각합니다. 방법을 검색한다고 가정했지만 Windows 명령 프롬프트에서 클립 보드복사를 참조하십시오 .
llogan

4
@Rajib : -framerateand -loop정지 이미지 의 이유 는 페이드 아웃이 작동하기 때문입니다. 단일 프레임 만있는 경우 1 초 간격으로 페이드 아웃 할 수 없습니다. 페이드가 가능한 한 매끄럽게되도록 비디오와 동일한 프레임 속도 여야합니다.
mark4o

19

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를 참조하십시오 .


대단히 감사합니다! :) 깨진 영어로 다시 사과드립니다.이 명령은 완벽하게 작동합니다! :)
iwocan

마침내 이해할만한 것! 처음보다 처음에 나타나게하려면 무엇을 사용해야합니까?
cikatomo

처음과 끝에 나타 났을까요? 두 번. enable = between (t \, 0 \, 30) : enable = between (t \, 50 \, 60) 시도했지만 마지막 타임 라인 만 적용됩니다
cikatomo

@cikatomo enable=not(between'(t,30,50)'). 30-60 초 동안이 아니라 항상 오버레이가 표시됩니다.
llogan

고마워요 overlay혼자 사용하지 말라는 경고에도 불구하고 왼쪽 상단의 기본 위치는 내가 원하는 것이므로 사용했습니다. (그래서 결국 내 깃발은 간단했다 filter_complex overlay.)
felwithe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.