내가 만든 GIF가 왜 이렇게 느립니까?


33

ImageMagick을 사용하여 png 모음을 단일 gif로 변환합니다. 이 gif가 최대한 빨리 반복되기를 원합니다.

이것은 대략 내가 기대하는 결과입니다 ( Wikipedia 제공 ).

예상 출력

이것이 실제로 얻는 결과입니다.

실제 출력

내 브라우저 (Firefox 17)에서 예상 gif는 실제 gif보다 두 배 이상 빠르게 실행됩니다. 각 프레임마다 지연이 0이되도록 지정했기 때문에 이것은 놀랍습니다.

먼저 Wikipedia에서 빌린 GIF를 폭발시켜 36 개의 png를 만들었습니다.

--caution: command generates 36 pngs
convert.exe newton.gif newton_%d.png

그런 다음 coalescepng를 하나의 gif로 다시 결합했습니다.

convert.exe -dispose none -delay 0 newton_%d.png[0-35] -coalesce output.gif

identify 각 프레임에 지연이 없음을 확인합니다.

identify.exe -format "%T, " output.gif
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

실제로 이것은 원본보다 지연이 적습니다.

identify.exe -format "%T, " newton.gif
5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2,

실제 gif는 예상 gif보다 지연이 적습니다. 그렇다면 예상되는 gif가 실제 gif보다 두 배 빠른 이유는 무엇입니까?


1
호기심에서 지연을 0이 아닌 1로 설정하면 어떻게됩니까?
mgilson

1
프레임 속도 문제처럼 보입니다.
SnakeDoc

@ mgilson, 방금 시도했습니다. 0- 지연 이미지와 1- 지연 이미지는 완벽하게 동기화 된 것으로 보입니다. 1- 지연 이미지는 매 루프마다 36 / 100 / 초보다 뒤 쳐야하기 때문에 이상합니다.
Kevin

1
이 질문에 대한 tl; dr : 사용하십시오-delay 2 .
Matt M.

답변:


17

나는 10ms (지연 = 1) 버전을 실험하고 만들었습니다.

10ms 지연 예

gif를 렌더링하는 프로그램은 0 분의 1 초 지연 속도를 따르지 않는 것 같습니다. 대신, 선택한 작은 값보다 훨씬 큰 값을 사용합니다.

그들이 왜 이런 일을하는지에 대해서는 말할 수 없습니다. 나는 두 가지 이상의 이유를 발견했으며 그 모든 추측이 가능합니다.

일반적으로 모든 경우에 최소 200 초의 지연을 사용하는 것이 좋습니다.

출처 (이것에 대한 여러 가지 이유가있는 방법을 보여줍니다. 일부는 비교적 오래되었습니다) :


1
렌더링 프로그램이 너무 빠른 모든 gif를 느리게하면 Wikipedia의 gif는 내 gif만큼 느립니다. 그러나 그렇지 않습니다. Wikipedia가 제한 속도를 초과 할 수없는 이유는 무엇입니까?
Kevin

2
@Kevin : 너무 빠른 모든 GIF 속도가 느려집니다. GIF가 너무 빠릅니다. Wikipedia의 GIF는 너무 빠르지 않습니다. "너무 빠르지"않도록 속도를 늦춰야합니다.
David Schwartz

Wikipedia gif의 프레임 지연 범위는 20 ~ 50ms입니다. 내 프레임 지연을 20ms로 설정하면 이론적으로 Wikipedia gif와 같은 "너무 빠르지 않은"기준을 충족하더라도 여전히 느립니다.
Kevin

2
지연이 20ms 인 위키 백과 이미지와 함께 지연이 20ms 인 GIF를 포함하는 경우 살펴 보겠습니다.
David Mah

2
나는 착각했다. 20 밀리 GIF 위키 백과 GIF로 빨리 참으로 내가 작성됩니다.
Kevin

18

@DavidMah가 옳은 것 같습니다. 내 Linux 시스템에서 최소 지연은 0.5입니다.

convert -dispose none -delay 0.4 newton_%d.png[0-35] -coalesce output0.4.gif

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

convert -dispose none -delay 0.5 newton_%d.png[0-35] -coalesce output0.5.gif

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

convert -dispose none -delay 1 newton_%d.png[0-35] -coalesce output1.gif

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

어떤 이유로 이미지가 브라우저에 제대로 표시되지 않는 것 같습니다. 로컬 이미지 뷰어 ( eom)를 사용하면 첫 번째 이미지는 원래 질문의 이미지보다 느리고 다른 두 이미지는 위키 백과보다 빠릅니다. 어쨌든 내 브라우저에만 문제가있는 경우를 대비하여 게시하고 있습니다. 어쨌든 위의 명령을 시도하면 더 나은 속도를 얻을 수 있습니다.


업데이트 : 두 가지 문제가있는 것 같습니다. 브라우저 (Linux에서 실행되는 파이어 폭스 및 크롬 이상)는 1.5 미만의 지연으로 생성 된 gif를 표시 할 수 없습니다. 1.5는 잘 작동하고 1.4는 느립니다. 내 이미지 뷰어는 0.5 이상의 지연을 처리 할 수 ​​있습니다. 위 이미지 중 하나를 다운로드하여 좋아하는 이미지 뷰어에서 열어보십시오. 또한 다음을 살펴보십시오.

convert -dispose none -delay 1.4 newton_%d.png[0-35] -coalesce output1.4.gif

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

convert -dispose none -delay 1.5 newton_%d.png[0-35] -coalesce output1.5.gif

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

UPDATE2 : @DavidMah는 아래 주석에서 소수점 값이 가장 가까운 정수로 반올림됨을 지적합니다. 따라서 1.4는 1로 반올림되고 너무 느리고 1.5는 2로 반올림됩니다.


7
지연을 10 진수 값에 할당하려고 시도하십시오. 지연은 2 바이트로 저장되며 (최대 프레임 지연이 655360ms라는 의미) 부호없는 정수입니다. Convert는 값을 가장 가까운 정수로 반올림합니다. en.wikipedia.org/wiki/Graphics_Interchange_Format#Animated_GIF
David Mah

3
@DavidMah 아, 그건 말이됩니다. 따라서 1.5는 2로 반올림되기 때문에 작동하지만 1.4는 1로 반올림되기 때문에 1.4가 아닙니다.
terdon

6

XxY지연 표기법을 사용하여 더 많은 성공을 거두었습니다 . 기본적으로는 x과 같습니다. /따라서 지정 -delay 1x20하면 프레임이 1/20 초 동안 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.