나란히 실행하려는 두 개의 애니메이션(.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] --+
보시다시피, 한 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 자체의 문제인지는 모르겠습니다 . 그러나 나는 이것을 브라우저에서 관찰하지 못했습니다.
Ubuntu 23.10, ffmpeg 6.0에서 테스트되었습니다.
답변3
convert
입력 이미지를 2개 이상 제공하고, 옵션을 제공하는 경우, -delay
출력 형식이 gif이면 애니메이션 gif가 출력됩니다.
이전에 다음 링크를 참조 가이드로 사용했습니다.http://www.imagemagick.org/Usage/anim_basics/