본문 바로가기

AI & Big Data/Image

[AI Image] 메타코드M '생성형 AI 입문 완성강의ㅣ스테이블 디퓨전 프로젝트 실습 + 프롬프트 엔지니어링 Skills' 강의 후기 #7 - 생성AI 실습 (AnimateDiff, Temporal Kit)

728x90
반응형

  이번 메타코드M '생성형 AI 입문 완성강의ㅣ스테이블 디퓨전 프로젝트 실습 + 프롬프트 엔지니어링 Skills' 강의에서는 지난 수업에 이어 AI 영상 스킬을 배울 것이다. AnimateDiff, temporal-kit를 활용해 다양하고 더 발전된 영상을 생성해보고자 한다. 

※ 이전글: 2024.03.22 - [AI & Big Data/Image] - [AI Image] 메타코드M '생성형 AI 입문 완성강의ㅣ스테이블 디퓨전 프로젝트 실습 + 프롬프트 엔지니어링 Skills' 강의 후기 #6 - 생성AI 실습 (Deforum, mov2mov)

 

메타코드M

빅데이터 , AI 강의 플랫폼 & IT 현직자 모임 플랫폼ㅣ메타코드 커뮤니티 일원이 되시기 바랍니다.

mcode.co.kr

 

Index

     

    3강. 생성AI 실습

    AnimateDiff 실습

      AnimateDiff는 일종의 움짤을 만드는 기술이다. 지금까지 공부했던 AI 영상 기술은 다수의 이미지를 만들어 연속 재생하는 것이었는데 이것은 하나의 파일로 생성된다는 점에서 차이가 있다.

    AnimateDiff 설치

      Extensions - Available에서 'animated' 검색 후, 가장 stars가 많은 것을 설치한다.

    AnimateDiff 설치 완료

      설치가 이상없이 마무리되면 text2img에 AnimateDiff라는 박스가 만들어진다. 

      강의에서는 realistic ckpt를 활용해 구름을 만들었고 이 구름을 가지고 자동차에서 연기가 나오는 것을 표현하고자 했다. 따라서 프롬프트창에 마음에 드는 연기를 표현할 수 있도록 단어를 조합해 이미지를 생성하도록 한다.

    AnimateDiff 설정

      Motion Module은 다음 사이트 (링크)에서 별도로 다운로드해야 한다. 모델을 설치 후, [extensions] - [sd-webui-animatediff] - [model]에 해당 파일을 넣는다. 

      FPS 8로 3초 동안 움직이는 영상을 만들 것이라 Number of frames를 24로 변경했다.

      Frame Interpolation을 FILM으로 하면 조금 더 부드러운 표현이 가능하다고 한다. 또 ControlNet으로 미세한 움직임을 주는 것도 가능하다.

    스테이블 디퓨전 inpaint

      img2img로 이동해 inpaint를 써서 연기 부분을 편집한다. img2img에서의 AnimateDiff 설정은 아래와 같다.

    i2i AnimateDiff
    Optional last frame 설정

      Optional last frame에서 마지막 프레임에 들어갈 이미지를 지정할 수 있다.

    AnimateDiff ControlNet

      추가로 ControlNet까지 설정했다. 다만, ControlNet을 쓰면 일렁이는 효과는 줄 수 없으나 배경이 깨지는 것은 막을 수 있다. 

    AnimateDiff 결과

      자동차에서 나오는 연기가 움직이는 영상이 완성됐다. 기존의 이미지를 가지고 특정 부분에 다이나믹한 효과를 줄 수 있는 것이 강점으로 보인다. 더 자연스러운 이미지를 위해 프롬프트에 변화를 줘가며 Generate를 거듭할 필요가 있는 것은 다소 아쉬운 점이다.

    Temporal Kit 실습

      Temporal-Kit는 mov2mov와 비슷하지만 성능이 좋고 조금 더 부드럽게 표현된다고 한다. 고성능인만큼 확실히 요구하는 것들이 많아 실행하기까지의 절차가 다소 까다롭다.

    EbSynth 압축 해제

      먼저 ebsynth를 설치한다 (링크). ebsynth는 영상 사이사이의 프레임을 보간하여 자연스럽게 만들어주는 프로그램이다. 

    ffmpeg 압축 해제 후 경로 설정

      다음으로 ffmpeg를 깔아야 한다 (링크). 이 페이지에서 'ffmpeg-git-essentials.7z.ver'를 다운로드 한다. 이 파일의 압축을 해제하여 webui 폴더 안에 새로운 폴더를 만들어 넣어준다.

    시스템 환경 변수 편집
    환경 변수 설정

      환경 변수도 편집해야 한다. 환경 변수 > path (사용자 변수) 선택 후 편집 > 새로 만들기 > ffmpeg 경로 추가 순으로 진행한다.

    시스템 변수 편집

      사용자 변수 아래 있는 시스템 변수도 변경한다. Path를 더블클릭하고 '새로 만들기'를 눌러 ffmpeg 경로를 넣는다. 

    cmd ffmpeg 확인

      cmd 실행 후, ffmpeg를 입력해 설치 상태를 확인한다. where ffmpeg를 넣어 경로를 찾아볼 수 있다.

      참고로 영상은 기본 사진 프로그램에서 비디오 자르기 기능을 이용해 편집할 수 있다. 이것으로 준비 단계가 끝났다.

    temporal kit 설치

      이제 webui를 켜서 Temporal Kit를 설치한다. 지금까지 해왔던 것처럼 Extensions - Available에서 다운로드하고 Installed로 이동해 Apply and restart를 누른다.

    스테이블 디퓨전 Temporal-Kit

      제대로 따라왔다면 위와 같은 화면이 나올 것이다. fps는 영상과 동일하게 넣어주면 된다. frames per keyframe은 작을수록 높은 퀄리티의 영상을 만들지만 그만큼 소요 시간이 길어진다. 이미지처럼 5와 30을 주면, 30/5로 초당 6개의 프레임을 만들어낸다. 

    temporal kit preprocessing 설정

      본 강의에서는 위와 같이 설정했다. 옵션 설정이 끝났다면 화면 우측의 run 버튼을 누른다. input 등의 폴더가 생성되고 그 안에 여러 프레임이 들어가 있을 것이다.

    img2img 프롬프트

      img2img로 넘어가 어떤 이미지가 만들어질지 방향성을 확인해본다. lora는 실사로 설정돼 있는데 이번 수업과 컨셉이 맞지 않으므로 제거하는 것이 좋을 수도 있다. 

    i2i 설정

      추가로 ControlNet을 써서 더 좋은 이미지를 만들 수도 있다.

    batch 설정

      i2i 끝부분의 batch로 이동한다. Input과 Output 경로를 설정하고 Generate한다. (12초짜리 영상의 생성에 30분 가량 소요.)

    Ebsynth-Process 설정 1

      Temporal-Kit로 가서 Input 폴더의 경로를 넣는다. 백슬래시를 추가해야 하는 것에 유념한다.

    Ebsynth-Process 설정 2

      영상을 넣고 read_last_settings를 누르면 자동으로 설정을 가져온다. 이 설정값을 그대로 유지하고 prepare ebsynth를 클릭한다.

    prepare ebsynth 결과

      위와 같은 폴더가 만들어지고 keys는 보정이 필요한 이미지라고 한다. 

    Ebsynth 실행

      이제 Ebsynth 프로그램을 실행한다. keyframes에 keys, video에 frames 폴더를 드래그 앤 드랍하여 경로를 수정한다. dir이 바뀌지 않는다면 프로그램을 재시작해야 한다. 숫자로 된 폴더에 대해 모두 동일한 작업을 시행한다.

      이 과정이 모두 완료됐다면 webui로 돌아가 recombine ebsynth를 누른다. 화면 우측의 output 박스가 반응하기 시작하면서 영상이 만들어지고 결과물인 output.mp4 파일이 생성된다. 

    728x90
    반응형