png를 gif와 병합(png를 gif 위에 배치)한 다음 결과를 gif로 얻으려고 합니다.
나는 그것을 가지고 놀았 convert
지만 내가 원하는 방식으로 작동하도록 할 수 없었습니다.
지금까지 나는 다음 명령을 시도했습니다.
convert layer1.png layer2.gif -append mergedLayers.gif
convert-im6.q16: memory allocation failed `layer2.gif' @ error/gif.c/ReadGIFImage/1303.
누구든지 아이디어가 있나요?
답변1
다음을 사용하여 이 작업을 수행할 수 있습니다 ffmpeg
.
ffmpeg -y -i layer2.gif -i layer1.png -filter_complex [0]overlay=x=0:y=0[out] -map [out] -map 0:a? mergedLayers.gif
-y
플래그는 묻지 않고 출력 파일을 덮어쓸 수 있음을 나타냅니다. 따라서 해당 이름의 파일이 이미 있는 경우 mergedLayers.gif
이 명령을 실행할 때 해당 파일을 덮어쓰게 됩니다.
-i
flag는 입력 URL입니다(이 경우 파일 이름만 해당). 따라서 두 개의 입력 파일을 전달하고 있습니다. layer2.gif
그리고 layer1.png
.
-filter_complex
어떤 의미에서 플래그는 출력을 생성하기 위해 입력에서 실행되는 함수입니다. 이 경우 함수는 첫 번째 입력 파일을 덮어쓸 개체로 사용한다는 [0]overlay=x=0:y=0[out]
의미 입니다. 대신 [0]
사용하면 기본 레이어로 png가 사용됩니다. 오버레이 개체를 배치할 위치를 알려줍니다. 에서 x 및 y 값을 변경하여 이미지에 png가 표시되는 위치를 조정할 수 있습니다 . 는 이미지의 왼쪽 상단입니다. x 값을 늘리면 이미지가 오른쪽으로 이동합니다. y 값을 늘리면 이미지가 아래쪽으로 이동합니다. 생략 하면 기본값은 입니다 .[1]
[0]
overlay=x=0:y=0
[0]overlay=x=0:y=0[out]
x=0:y=0
=x=0:y=0
overlay
x=0:y=0
-map
플래그는 입력을 출력 소스로 지정하는 방법입니다. 이 간단한 경우에는 필요하지 않을 수도 있습니다. 다음과 같이 할 수 있습니다.
ffmpeg -y -i layer2.gif -i layer1.png -filter_complex [0]overlay=x=0:y=0 mergedLayers.gif