FFMPEG : 이미지 위에 스케일 된 비디오 오버레이


1

정적 인 이미지와 그 위에 오버레이 된 작은 비디오가 포함 된 비디오를 제작하려고합니다. 오버레이 비디오의 크기와 위치는 FFMPEG를 실행하는 서버 스크립트로 동적으로 전송되므로 오버레이하기 전에 비디오를 확장해야합니다. 그래서, 제가 사용한 수치는 테스트 용입니다. 원본 동영상의 크기는 72 : 48 픽셀입니다. 나는 이런 명령을 시도 :

ffmpeg -i background.jpg -vf "movie=overlay.mp4, scale=128:96 [inner]; [in][inner] overlay=70:70 [out]" -y output.mp4

그러나 빈 비디오가 즉시 생성됩니다. 반면에 명령 -loop 1바로 뒤에 삽입하려고 ffmpeg하면 비디오 처리에 끝이없는 시간이 걸리며 끝나지 않습니다.

내가 성취하고자하는 것은 먼저 스케일 된 비디오를 만드는 것을 피하는 것입니다. 그것은 가능하고 내가 뭘 잘못하고 있니?

답변:


4

용도

ffmpeg -loop 1 -i background.jpg \
       -vf "movie=overlay.mp4,scale=128:96[inner];[in][inner]overlay=70:70:shortest=1[out]" \
       -y output.mp4

이미지를 반복해야하지만 끝내지 않는 스트림이 만들어 지므로 오버레이 필터의 가장 짧은 인수는 동영상이 끝날 때 필터를 중지합니다.


오버레이의 오디오 포함

ffmpeg -loop 1 -i background.jpg -i overlay.mp4 \
       -filter_complex "[1]scale=128:96[inner];[0][inner]overlay=70:70:shortest=1[out]" \
       -map "[out]" -map 1:a -c:a copy -y output.mp4

감사합니다. 출력 파일에 오디오가 없다는 점을 제외하고는 완벽하게 작동합니다. overlay.mp4에서 오디오 스트림을 사용하려면 출력 비디오가 필요합니다. -c:a copy이미지 경로 뒤에 또는 비디오 경로 뒤에 추가하려고 하면 오류가 발생합니다. 적절한 방법은 무엇입니까?
cincplug

이 질문은 아마도 다른 질문 일 것입니다. 그러나 코드를 상속 했으므로 먼저 여기에 설명했습니다. 위에서 설명한대로 생성 된 output.mp4 다음에 다른 비디오 (오디오 스트림을 사용하여)를 연결하는 방법은 무엇입니까? 필자는 별도로 다음과 같이 할 수있었습니다. ffmpeg -f concat -i concatlist.txt -c copy finaloutput.mp4그러나 첫 번째 완료 전에 원격 서버에서 실행되고 두 번째 지시문이 시작되기 때문에 한 ffmpeg 지시문의 범위에 있어야합니다. 연결된 비디오는 output.mp4와 동일한 크기, 코덱 및 프레임 속도를가집니다. 나는 좋은 결과와 함께 하루 종일 concat 필터와 투쟁 :)
cincplug
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.