스틸 이미지에서 애니메이션 GIF를 만들려면 어떻게해야합니까?


78

.gif주어진 그림 세트에서 애니메이션 그림을 만들고 싶습니다 .jpg.

나는 커맨드 라인에서 그것을 선호하기 때문에 커맨드 라인 도구는 매우 환영받을 것입니다.


답변:


87

ImageMagick 패키지 를 사용할 수 있습니다 . 다음 명령을 사용하여 설치하십시오.

sudo apt-get install imagemagick

이제 다음을 사용하여 gif여러 그림 ( jpg)을 만들 수 있습니다 .

convert -delay 20 -loop 0 *.jpg myimage.gif

6
GIF 애니메이션 등의 크기를 50 % 조정하는 방법을 여기에 포함하십시오. 기타 -resize 50%.
Léo Léopold Hertz 준영

우분투 18.10 이러한 이미지는 "소진 캐시 자원"실패했습니다 github.com/cirosantilli/media/blob/master/... 관련 : superuser.com/questions/1178666/...
치로 틸리新疆改造中心法轮功六四事件

ImageMagick 사용자는 다음을 원할 것 -deconstruct입니다. 나는 또한 ImageMagick이 매우 메모리 배고픈 것을 발견 한 벤치 마크를 참조하십시오 askubuntu.com/a/1102183/52975
치로 틸리新疆改造中心法轮功六四事件

convert -delay 0 -loop 0 *.tif myanimated.gif720 tif 파일에서 훌륭하게 작동했습니다
ron

46

@ Maythux 답변을 완료하려면 :

매우 큰 파일을 생성하지 않으려면 -resize옵션 을 사용할 수 있습니다 .

제 경우에는 4608x3456 이미지가 있고 생성 된 gif는 32 이미지의 300M 이상이었습니다.

convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif

또는

convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif

* .jpg 관리

*.jpg 숫자 값을 처리 할 때 조금 짜증 나면 정렬되지 않은 사진으로 gif를 생성 할 수 있습니다.

$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg   // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg    // <--- should be here    
21-33-28_2.jpg
21-33-28_3.jpg
...

샷이 매우 빠르게 (10 / s) 촬영되었으므로 모두 수정 시간이 동일 ls -t하며 예를 들어 속임수를 쓸 수 없습니다 . 우분투에서는 ls -v대신 다음과 같이 사용할 수 있습니다 .

convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif

Mac OS X에서는 숫자로 정렬하는 것이 매우 까다 롭습니다. 사용자 정의 스크립트를 작성해야한다고 생각합니다.


4
숫자가 0으로 앞뒤로 채워져 * .jpg 문제를 피할 수 있습니다. "1.jpg"대신 "01.jpg"등이 있습니다. 세 자리 숫자에 도달하면 "001.jpg", "010.jpg"등
bigreddmachine

2
파일 이름 시퀀스 문제에는 여러 가지 방법이 있습니다. 포함 find, sort등등, 중괄호 확장하고 있습니다. 이 ls도구는 이런 종류의 것에 부적합합니다. 사용하십시오 find. 약간의 학습 곡선이 있지만 그만한 가치가 있습니다.
음성

일부 사용자는 massren와 편집 파일 이름에 관심이있을 수 있습니다 github.com/laurent22/massren
그레이엄 P 히스

마치려면 몇 년이 걸립니다. 자세한 옵션이 있습니까?
ouranos

21

나는 의견을 말할만큼 평판이 좋지 않지만 파일 이름을 수정하는 대신 globbing을 사용하여 쉘이 파일 이름을 확장하도록 할 수 있습니다

convert -resize 50% -delay 10 -loop 0 image_{0..99}.jpg output.gif

11

김프로 쉽게 할 수 있습니다. 아직 설치되어 있지 않은 경우 먼저 설치하십시오.

sudo apt-get install gimp

GIF 만들기

김프에서 파일 -> 레이어열기로 이동하여 모든 레이어 를 자체 레이어 에서 엽니 다.

레이어로 열기

여기에서 레이어에 대한 편집을 수행하고 완료되면 파일 -> 다른 이름으로 내보내기로 이동하십시오 . 대화 상자에서 파일 형식을 GIF로 설정하십시오.

파일 형식을 GIF로 설정

거기에서 GIF 내보내기 옵션으로 이동합니다. ' 애니메이션으로 '옵션을 선택하고 필요에 따라 매개 변수를 설정하십시오.

GIF 내보내기 옵션


7

ffmeg 솔루션 + 테스트 데이터

우분투 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8에서 ffmpeg가 훨씬 빠르며 훨씬 적은 메모리를 사용한다는 것을 알았습니다 .

가장 간단한 변환 명령은 다음과 같습니다.

ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i '*.png' \
  -r 15 \
  -vf scale=512:-1 \
  out.gif \
;

다음을 사용하여 테스트 데이터를 얻을 수 있습니다.

wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle

테스트 데이터는 https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 에서 생성되었으며 256 1024x1024 PNG 이미지를 포함합니다.

그리고 여기 브라우저에서 직접 생성 할 수있는 또 다른 테스트 데이터가 있습니다! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718

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

ffmpeg강조하고 싶은 중요한 옵션은 다음과 같습니다.

  • -pattern_type glob: 편리한 이미지 선택 방법

  • -framerate 60: 입력 이미지에서 60FPS를 가정하고 동일한 FPS를 출력합니다.

    ffmpeg 비디오 형식과 마찬가지로 이미지에 FPS 데이터가 없기 때문에 달리 알 수 없습니다.

    256 개의 입력 프레임이 완료되는 데 약 4 초가 걸립니다.

    -r 15: 선택 사항. 4 개의 이미지마다 하나씩 선택하여 크기를 줄이십시오 ( 4 == 60 / 15).

    그것으로 identify out.gifGIF는 64 프레임 만 포함한다고 말합니다.

    여전히 재생하는 데 4 초가 걸리므로 일이 일치하도록 지연이 변경됩니다.

  • -vf scale=512:-1: 선택 사항. 일반적으로 크기를 줄이고 공간을 절약하려면 너비, 배율 높이를 비례 적으로 설정하십시오.

ImageMagick을 작동 시키려면 먼저 https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pages에/etc/ImageMagick-6/policy.xml 설명 된대로 디스크 및 메모리 제한을 수정해야 했습니다.

또한보십시오:

ImageMagick 및 ffmpeg 벤치 마크

나는 명령을 비교했다 :

/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i '*.png' \
  out-ffmpeg.gif \
;

명령은 비교를 유효하게하기 위해 가능한 한 가까운 출력을 생성하도록 구성되었습니다.

  • /usr/bin/time -v: https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process에 설명 된대로 최대 메모리 사용량을 찾는 데 사용됩니다.

  • -deconstruct: GIF 이미지는 이전 프레임에서 수정 된 최소 사각형 만 포함하여 GIF를 더 작게 만들 수 있습니다.

    ffmpeg기본적으로 이러한 차이를 계산하지만, -deconstruct사용 하지 않으면 ImageMagick은 그렇지 않습니다 .

    기본적으로 ImageMagick과 함께이 옵션을 사용하려고합니다.

    다음과 같은 차이점을 관찰 할 수 있습니다.

    identify out.gif
    

    압축 버전을 사용하면 모든 프레임의 크기가 초기 프레임보다 작습니다. 예 :

    out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
    out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
    out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
    

    이 예에서 두 번째 프레임은 516x516전체 1024x1024 대신에이며 오프셋에 배치됩니다 252+257. 따라서 가운데 ​​삼각형 만 포함합니다.

    참조 : 내가 ImageMagick이를 사용하여 애니메이션 GIF 파일의 크기를 조정할 수있는 방법?

  • -delay:의 60FPS와 일치하는 값입니다 ffmpeg. 전환 실적은 중요하지 않지만 전환 위험을 감수하고 싶지 않습니다.

출력 GIF는 크기가 거의 같고 시각적으로 동일하게 보입니다.

우리는 ImageMagick을 얻습니다.

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856

ffmpeg의 경우 :

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172

우리는 그것을 볼 수 있습니다 :

  • ImageMagick은 2.6Gb의 RAM을 사용했으며 약 1 분이 걸렸습니다.
  • ffmpeg는 100Mb의 RAM을 사용했으며 4 초가 걸렸습니다.

테스트 하드웨어 : Lenovo ThinkPad P51 노트북 , Intel Core i7-7820HQ, 32GB (16 + 16) DDR4 2400MHz SODIMM, 512GB SSD PCIe TLC OPAL2.


공감하고 좋아했습니다! 훌륭한 답변입니다. 작은 후속 질문이 하나 있습니다. 나는 그다지 높은 품질의 이미지를 가지고 있고, 내가 사용하지 않은 -r -v명령, 여전히 출력 GIF 원본 PNG 파일보다 훨씬 낮은 품질이다. 주어진 png 파일과 동일한 gif 품질을 유지하는 방법은 무엇입니까?
astro123

안녕하세요 @ astro123 품질은 어떻습니까? 더 작은 이미지 크기 또는 더 적은 프레임 또는 다른 것 (GIF는 무손실을 사용하므로 압축률을 떨어 뜨릴 수 없음)? 시도하십시오 -framerate 60 -r 60. ImageMagick 도구를 사용하여 생성 된 GIF 및 입력 이미지를 검사하여 identify진행중인 작업을 파악하십시오.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

4

imagemagick 패키지에 포함 된 convert라는 프로그램을 사용할 수 있습니다. 명령 줄 방식이지만 사용하기가 매우 쉽습니다. 소프트웨어 센터를 통해 설치하거나 명령 프롬프트로 이동하여 다음을 입력하십시오.

sudo apt-get install imagemagick

이제 .gif를 만듭니다.

convert -delay 100  -size 100x100 xc:SkyBlue \
          -page +5+10  balloon.gif   -page +35+30 medical.gif  \
          -page +62+50 present.gif   -page +10+55 shading.gif  \
          -loop 0  animation.gif

* 위의 예는 Image Magick의 예와 동일합니다.


1
루핑 GIF에서 40 개의 PNG 이미지를 어떻게 수행합니까? 폴더 / home / fusion809 / Documents / Images의 모든 파일
BH2017

1
@ BH2017 : convert -delay 20 -loop 0 *.png out.gif반복되는 GIF를 만듭니다.
unutbu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.