BIBLIOGRAPHY
#Related-Notes
howto
gif-to-mp4.sh
2024-12-30
@user 리λ μ€μμ μ¬μ©ν gif to mp4 μ μ€ν¬λ¦½νΈ λ§λ€μ΄μ€.
@assistant λ¬Όλ‘ μ
λλ€. μλλ gif νμΌμ =mp4=λ‘ λ³ννλ κ°λ¨ν μ μ€ν¬λ¦½νΈμ
λλ€. μ΄ μ€ν¬λ¦½νΈλ =ffmpeg=λ₯Ό μ¬μ©νμ¬ λ³νν©λλ€. =ffmpeg=κ° μ€μΉλμ΄ μμ§ μλ€λ©΄ λ¨Όμ μ€μΉν΄μΌ ν©λλ€.
#!/bin/bash
# ffmpegκ° μ€μΉλμ΄ μλμ§ νμΈ
if ! command -v ffmpeg &> /dev/null
then
echo "ffmpegκ° μ€μΉλμ΄ μμ§ μμ΅λλ€. μ€μΉ ν λ€μ μλνμΈμ."
exit 1
fi
# μΈμλ‘ gif νμΌ μ΄λ¦μ λ°μ
if [ "$#" -ne 1 ]; then
echo "μ¬μ©λ²: $0 <gif νμΌ μ΄λ¦>"
exit 1
fi
gif_file="$1"
# νμΌμ΄ μ‘΄μ¬νλμ§ νμΈ
if [ ! -f "$gif_file" ]; then
echo "νμΌ $gif_file μ΄(κ°) μ‘΄μ¬νμ§ μμ΅λλ€."
exit 1
fi
# μΆλ ₯ νμΌ μ΄λ¦ μ€μ
mp4_file="${gif_file%.gif}.mp4"
# gifλ₯Ό mp4λ‘ λ³ν
ffmpeg -i "$gif_file" -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" "$mp4_file"
if [ $? -eq 0 ]; then
echo "λ³ν μλ£: $mp4_file"
else
echo "λ³ν μ€ μ€λ₯κ° λ°μνμ΅λλ€."
fiμ΄ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ €λ©΄:
- μμ μ½λλ₯Ό
gif_to_mp4.shκ°μ μ΄λ¦μΌλ‘ νμΌμ μ μ₯ν©λλ€. chmod +x gif_to_mp4.shλͺ λ Ήμ΄λ‘ μ€ν κΆνμ λΆμ¬ν©λλ€.- ν°λ―Έλμμ
gif_to_mp4.sh your_gif_file.gifνμμΌλ‘ μ€νν©λλ€.
μ΄ μ€ν¬λ¦½νΈλ μ
λ ₯λ gif νμΌμ =mp4=λ‘ λ³ννκ³ , λ³νλ νμΌμ μ΄λ¦μ μλ νμΌ μ΄λ¦μμ νμ₯μλ§ =mp4=λ‘ λ³κ²½νμ¬ μ μ₯ν©λλ€. =ffmpeg=μ μ΅μ
μ ν΅ν΄ λΉλμ€μ ν¬κΈ°λ₯Ό 2μ λ°°μλ‘ μ‘°μ νμ¬ νΈνμ±μ λμμ΅λλ€.
@user λΉλμ€ ν¬κΈ°λ₯Ό 2μ λ°°μλ‘ μ‘°μ νλ μ΄μ λ?
@assistant λΉλμ€ ν¬κΈ°λ₯Ό 2μ λ°°μλ‘ μ‘°μ νλ μ΄μ λ λ€μκ³Ό κ°μ΅λλ€:
-
H.264/AVC μΈμ½λ© νΈνμ±: H.264/AVC (Advanced Video Coding)μ κ°μ λ§μ λΉλμ€ μ½λ±μ 2μ λ°°μλ‘ ν¬κΈ°κ° μ‘°μ λ λΉλμ€ νλ μμ λ ν¨μ¨μ μΌλ‘ μΈμ½λ©ν μ μμ΅λλ€. μ΄λ λΉλμ€ μμΆ μκ³ λ¦¬μ¦μ΄ 2μ λ°°μ ν¬κΈ°μμ λ μ μλνκΈ° λλ¬Έμ λλ€.
-
λ©λͺ¨λ¦¬ ν¨μ¨μ±: 2μ λ°°μ ν¬κΈ°λ λ©λͺ¨λ¦¬ ν λΉκ³Ό μ²λ¦¬μμ λ ν¨μ¨μ μ λλ€. CPUμ GPUλ 2μ λ°°μ ν¬κΈ°μ λ°μ΄ν°λ₯Ό λ λΉ λ₯΄κ² μ²λ¦¬ν μ μμΌλ©°, λ©λͺ¨λ¦¬ μ κ·Ό ν¨ν΄μ΄ λ μμΈ‘ κ°λ₯ν΄μ§λλ€.
-
νλμ¨μ΄ κ°μ: λ§μ κ·Έλν½ μΉ΄λμ νλμ¨μ΄ κ°μ μ₯μΉλ€μ 2μ λ°°μ ν¬κΈ°μ λΉλμ€λ₯Ό λ μ μ²λ¦¬ν©λλ€. μ΄λ νλμ¨μ΄κ° μ΄λ¬ν ν¬κΈ°μ λ°μ΄ν°λ₯Ό λ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μλλ‘ μ€κ³λμκΈ° λλ¬Έμ λλ€.
-
λΉλμ€ μ¬μ νΈνμ±: μΌλΆ νλ μ΄μ΄λ λμ½λλ 2μ λ°°μκ° μλ λΉλμ€ ν¬κΈ°μμ μ±λ₯ μ νλ νΈνμ± λ¬Έμ λ₯Ό κ²ͺμ μ μμ΅λλ€. 2μ λ°°μλ‘ μ‘°μ νλ©΄ μ΄λ¬ν λ¬Έμ λ₯Ό νΌν μ μμ΅λλ€.
-
νμΌ ν¬κΈ° μ΅μ ν: 2μ λ°°μλ‘ μ‘°μ νλ©΄ λΉλμ€ νμΌμ ν¬κΈ°λ₯Ό μ΅μ νν μ μμ΅λλ€. μ΄λ λΉλμ€ μΈμ½λ© κ³Όμ μμ λΆνμν ν¨λ©μ΄λ λ°μ΄ν° μμ€μ μ€μ¬ νμΌ ν¬κΈ°λ₯Ό μ€μ΄λ λ° λμμ΄ λ©λλ€.
λ°λΌμ, λΉλμ€ ν¬κΈ°λ₯Ό 2μ λ°°μλ‘ μ‘°μ νλ κ²μ λΉλμ€μ νμ§μ μ μ§νλ©΄μλ μΈμ½λ©, λμ½λ©, μ¬μ μ±λ₯μ μ΅μ ννκ³ , νΈνμ±μ λμ΄λ μ€μν λ¨κ³μ λλ€.
@user μμ μ€ν¬λ¦½νΈλ₯Ό κ²½λ‘λ₯Ό μΈμλ‘ λ°μμ, κ²½λ‘μ μλ λͺ¨λ gifλ₯Ό mp4λ‘ λ³κ²½νλλ‘ λ³κ²½ν΄μ€. μ΄λ, μ΄λ―Έ λ³κ²½ν mp4 νμΌμ΄ μλ€λ©΄ λ€μ gifλ‘ λμ΄κ°λ©΄ λΌ.
@assistant λ¬Όλ‘ μ
λλ€. μλλ κ²½λ‘λ₯Ό μΈμλ‘ λ°μ ν΄λΉ κ²½λ‘μ μλ λͺ¨λ gif νμΌμ =mp4=λ‘ λ³ννλ μ€ν¬λ¦½νΈμ
λλ€. μ΄λ―Έ λ³νλ νμΌμ΄ μμΌλ©΄ 건λλλλ€.
#!/bin/bash
# ffmpegκ° μ€μΉλμ΄ μλμ§ νμΈ
if ! command -v ffmpeg &> /dev/null
then
echo "ffmpegκ° μ€μΉλμ΄ μμ§ μμ΅λλ€. μ€μΉ ν λ€μ μλνμΈμ."
exit 1
fi
# μΈμλ‘ κ²½λ‘λ₯Ό λ°μ
if [ "$#" -ne 1 ]; then
echo "μ¬μ©λ²: $0 <λλ ν 리 κ²½λ‘>"
exit 1
fi
directory="$1"
# λλ ν λ¦¬κ° μ‘΄μ¬νλμ§ νμΈ
if [ ! -d "$directory" ]; then
echo "λλ ν 리 $directory κ° μ‘΄μ¬νμ§ μμ΅λλ€."
exit 1
fi
# λλ ν 리 λ΄μ λͺ¨λ gif νμΌμ μ°Ύκ³ λ³ν
for gif_file in "$directory"/*.gif; do
if [ -f "$gif_file" ]; then
# μΆλ ₯ νμΌ μ΄λ¦ μ€μ
mp4_file="${gif_file%.gif}.mp4"
# μ΄λ―Έ λ³νλ νμΌμ΄ μλμ§ νμΈ
if [ ! -f "$mp4_file" ]; then
# gifλ₯Ό mp4λ‘ λ³ν
ffmpeg -i "$gif_file" -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)/2:trunc(ih/2)/2" "$mp4_file"
if [ $? -eq 0 ]; then
echo "λ³ν μλ£: $mp4 μμ±: $gif_file"
fi
else
echo "μ΄λ―Έ λ³νλ νμΌμ΄ μμ΅λλ€: $mp4_file"
fi
fi
doneμ΄ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ €λ©΄:
- μμ μ½λλ₯Ό
gif_to_mp4_dir.shκ°μ μ΄λ¦μΌλ‘_to_mp4_dir.sh= λͺ λ Ήμ΄λ‘ μ€ν κΆνμ λΆμ¬ν©λλ€. - ν°λ―Έλμμ =gif
@user ffmpeg λμ μ λ‘κ·Έλ₯Ό μ보μ΄κ² νλ €λ©΄?assistant ffmpeg=μ λ‘κ·Έ μΆλ ₯μ μ¨κΈ°λ €λ©΄, =-loglevel μ΅μ
μ μ¬μ©νμ¬ λ‘κ·Έ λ 벨μ μ‘°μ ν μ μμ΅λλ€. λ‘κ·Έλ₯Ό μμ ν μ¨κΈ°λ €λ©΄ -loglevel quiet μ΅μ
μ μ¬μ©νλ©΄ λ©λλ€. μλλ λ‘κ·Έ μΆλ ₯μ μ¨κΈ΄ μ€ν¬λ¦½νΈμ μμ
λλ€:
#+begin_src sh #!/bin/bash
ffmpegκ° μ€μΉλμ΄ μλμ§ νμΈ
if ! command -v ffmpeg &> /dev/null
@user
@user μΈμ€νκ·Έλ¨ κ³΅μ μ μ΅μ νν΄μ μμ μ€ν¬λ¦½νΈλ₯Ό λ³κ²½ν΄μ€λ?
@assistant μΈμ€νκ·Έλ¨μ 곡μ νκΈ°μ μ΅μ νλ λΉλμ€λ₯Ό μμ±νκΈ° μν΄ λͺ κ°μ§ μ‘°μ μ κ°ν μ μμ΅λλ€. μΈμ€νκ·Έλ¨μ νΉμ λΉλμ€ νμκ³Ό ν΄μλ, λΉμ¨ λ±μ μ νΈν©λλ€. μλλ μΈμ€νκ·Έλ¨μ μ΅μ νλ gif νμΌμ =mp4=λ‘ λ³ννλ μ€ν¬λ¦½νΈμ
λλ€:
#!/bin/bash
# ffmpegκ° μ€μΉλμ΄ μλμ§ νμΈ
if ! command -v ffmpeg &> /dev/null
then
echo "ffmpegκ° μ€μΉλμ΄ μμ§ μμ΅λλ€. μ€μΉ ν λ€μ μλνμΈμ."
exit 1
fi
# μΈμλ‘ gif νμΌ μ΄λ¦μ λ°μ
if [ "$#" -ne 1 ]; then
echo "μ¬μ©λ²: $0 <gif νμΌ μ΄λ¦>"
exit 1
fi
gif_file="$1"
# νμΌμ΄ μ‘΄μ¬νλμ§ νμΈ
if [ ! -f "$gif_file" ]; then
echo "νμΌ $gif_file μ΄(κ°) μ‘΄μ¬νμ§ μμ΅λλ€."
exit 1
fi
# μΆλ ₯ νμΌ μ΄λ¦ μ€μ
mp4_file="${gif_file%.gif}_instagram.mp4"
# μΈμ€νκ·Έλ¨μ μ΅μ νλ λΉλμ€ μ€μ
# - μΈμ€νκ·Έλ¨μ 1:1, 4:5, 9:16 λΉμ¨μ λΉλμ€λ₯Ό μ νΈν©λλ€.
# - ν΄μλλ μ΅λ 1080x1350, 1080x1920, 1080x1080 λ±μ μ¬μ©ν μ μμ΅λλ€.
# - λΉλμ€ λΉνΈλ μ΄νΈλ 3.5Mbps μ΄μμ κΆμ₯ν©λλ€.
# - μ€λμ€ λΉνΈλ μ΄νΈλ 128kbps μ΄μμ κΆμ₯ν©λλ€.
# - νλ μ λ μ΄νΈλ μ΅λ 30fpsλ₯Ό κΆμ₯ν©λλ€.
ffmpeg -i "$gif_file" \
-vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2,setsar=1" \
-c:v libx264 -preset slow -crf 22 -b:v 3500k \
-c:a aac -b:a 128k \
-movflags +faststart \
-r 30 \
"$mp4_file"
if [ $? -eq 0 ]; then
echo "μΈμ€νκ·Έλ¨μ μ΅μ νλ λΉλμ€ λ³ν μλ£: $mp4_file"
else
echo "λ³ν μ€ μ€λ₯κ° λ°μνμ΅λλ€."
fiμ΄ μ€ν¬λ¦½νΈλ λ€μκ³Ό κ°μ λ³κ²½ μ¬νμ ν¬ν¨ν©λλ€:
- λΉλμ€ ν΄μλ: 1080x1080μΌλ‘ μ€μ νμ¬ μΈμ€νκ·Έλ¨μ 1:1 λΉμ¨μ λ§μΆ₯λλ€. μλ³Έ λΉλμ€μ λΉμ¨μ΄ 1:1μ΄ μλ κ²½μ°, λΉλμ€λ₯Ό μλ₯΄μ§ μκ³ μλ λΉμ¨μ μ μ§νλ©΄μ 1080x1080 ν¬κΈ°λ‘ ν¨λ©μ μΆκ°ν©λλ€.
- λΉλμ€ μΈμ½λ©:
libx264μ½λ±μ μ¬μ©νκ³ , =-preset slow=λ‘ νμ§μ λμ΄κ³ , =-crf 22=λ‘ λΉλμ€ νμ§μ μ€μ ν©λλ€. =-b:v 3500k=λ‘ λΉλμ€ λΉνΈλ μ΄νΈλ₯Ό μ€μ νμ¬ μΈμ€νκ·Έλ¨ κΆμ₯ λΉνΈλ μ΄νΈλ₯Ό λ§μΆ₯λλ€. - μ€λμ€ μΈμ½λ©:
aacμ½λ±μ μ¬μ©νκ³ , =-b:a 128k=λ‘ μ€λμ€ λΉνΈλ μ΄νΈλ₯Ό μ€μ ν©λλ€. - νλ μ λ μ΄νΈ: =-r 30=μΌλ‘ νλ μ λ μ΄νΈλ₯Ό 30fpsλ‘ μ€μ ν©λλ€.
- νμΌ μ΄λ¦: μλ³Έ νμΌ μ΄λ¦μ =_instagram=μ μΆκ°νμ¬ μΈμ€νκ·Έλ¨μ© νμΌμμ λͺ νν ν©λλ€.
μ΄ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ©΄ μΈμ€νκ·Έλ¨μ μ΅μ νλ λΉλμ€λ₯Ό μμ±ν μ μμ΅λλ€. μΈμ€νκ·Έλ¨μ μꡬ μ¬νμ μκ°μ΄ μ§λλ©΄μ λ³κ²½λ μ μμΌλ―λ‘, μ΅μ μ 보λ₯Ό νμΈνλ κ²μ΄ μ’μ΅λλ€.
@user
Comments