ImageMagick을 사용하여 두 애니메이션을 나란히 실행

ImageMagick을 사용하여 두 애니메이션을 나란히 실행

나란히 실행하려는 두 개의 애니메이션(.gif 파일)이 있습니다. ImageMagick을 사용하여 이 작업을 수행할 수 있습니까?

또한 다른 gif의 30프레임이 지난 후 gif 중 하나의 재생을 시작하고 싶습니다. 이것도 할 수 있나요? 그렇지 않으면 수동으로 30개의 검정색 프레임을 이미지에 삽입할 수 있지만 이 단계를 여러 번 수행할 수 있으므로 ImageMagick을 사용하여 이 단계를 자동화하는 것이 더 쉬울 것입니다.

답변1

이 스크립트의 기능은 다음과 같습니다.

#!/bin/bash
# $1 : first gif
# $2 : second gif

mkdir first
cd first
convert $1 x%04d.gif
cd ..
mkdir second
cd second
convert $2 x%04d.gif
cd ..

for filename in first/*
do
  filename=`basename $filename`
  montage -tile 2x1 -geometry 512x512 first/$filename second/$filename concat$filename
done
convert concat* output.gif

rm -rf first
rm -rf second
rm concat*

답변2

ffmpeg "one-liner"에는 중간 파일이 없습니다

이제 ffmpeg는 GIF도 처리할 수 있으므로 다음 "동영상 병렬" 질문에 대한 답변을 사용할 수 있습니다.두 개의 비디오 클립을 하나로 병합하여 나란히 배치이 문제도 해결해보자. 다음 명령은 각각 고정 높이가 300픽셀인 두 개의 GIF를 나란히 결합합니다.

ffmpeg \
  -i 1.gif \
  -i 2.gif \
  -filter_complex '
  [0]scale=-1:300[a];
  [1]scale=-1:300[b];
  [a][b]hstack
  ' \
  12.gif

여기에 이미지 설명을 입력하세요.

테스트 입력 1.gif(480x, 파란색 배경, 2초) 및 2.gif(640x, 녹색 배경, 3초)를 만들었습니다.

ffmpeg -y -f lavfi -i "
color=blue:480x480:d=2,
drawtext=
  fontcolor=black:
  fontsize=600:
  text='%{eif\:t\:d}':
  x=(w-text_w)/2:
  y=(h-text_h)/2
" 1.gif
ffmpeg -y -f lavfi -i "
color=green:640x640:d=3,
drawtext=
  fontcolor=black:
  fontsize=800:
  text='%{eif\:t\:d}':
  x=(w-text_w)/2:
  y=(h-text_h)/2
" 2.gif

이 명령은 다음 처리 그래프를 생성합니다.

1.gif --> [0] --> scale --> [a] --+
                                  |
                                  v
                                  hstack --> 12.gif
                                  ^
                                  |
2.gif --> [1] --> scale --> [b] --+
  • 가장 먼저scale필터비디오를 수정하여 동일한 높이로 설정
  • 그래서hstack필터비디오 사이에 확대된 내용을 가져와 수평으로 "스택"합니다.

보시다시피, 한 GIF가 다른 GIF보다 길면 이 명령은 마지막 프레임에서 가장 짧은 GIF를 중지합니다.

대신 비디오를 가장 짧은 비디오 실행 시간으로 자르려면 다음과 같은 shortest=1옵션을 추가할 수 있습니다 hstack.

ffmpeg -y -i 1.gif -i 2.gif -filter_complex '[0]scale=-1:300[a];
  [1]scale=-1:300[b];[a][b]hstack=shortest=1' 12-short.gif

여기에 이미지 설명을 입력하세요.

또는 수직으로 쌓기 위해 다음을 사용할 수 있습니다.vstack필터, 높이 대신 비디오 너비를 수정합니다.

ffmpeg -y -i 1.gif -i 2.gif -filter_complex '[0]scale=300:-1[a];
  [1]scale=300:-1[b];[a][b]vstack' 12-vert.gif

여기에 이미지 설명을 입력하세요.

결과 비디오를 로컬에서 볼 때 eog첫 번째 루프에 일부 그래픽 아티팩트가 있습니다. 이것이 eog버그인지 GIF 자체의 문제인지는 모르겠습니다 . 그러나 나는 이것을 브라우저에서 관찰하지 못했습니다.

관련된:https://stackoverflow.com/questions/30927367/imagemagick-making-2-gifs-into-side-by-side-gifs-using-im-convert

Ubuntu 23.10, ffmpeg 6.0에서 테스트되었습니다.

답변3

convert입력 이미지를 2개 이상 제공하고, 옵션을 제공하는 경우, -delay출력 형식이 gif이면 애니메이션 gif가 출력됩니다.

이전에 다음 링크를 참조 가이드로 사용했습니다.http://www.imagemagick.org/Usage/anim_basics/

관련 정보