📜  视频到 gif ffmpeg 调色板 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:27:54.984000             🧑  作者: Mango

视频到 gif ffmpeg 调色板 - Shell-Bash
简介

该工具使用 ffmpeg 命令将视频转换为 gif,同时使用调色板优化 gif 的色彩。使用 Shell-Bash 编写,适合在命令行下使用。

功能
  • 将视频转换为 gif
  • 使用调色板优化 gif 的色彩
  • 能够指定输出的 gif 尺寸和帧率
  • 支持对 gif 的每一帧进行优化处理,以达到更好的效果
依赖
  • ffmpeg
  • imagemagick
安装
  • 安装 ffmpeg
sudo apt install ffmpeg
  • 安装 imagemagick
sudo apt install imagemagick
  • 下载工具
git clone https://github.com/yourusername/yourrepository.git
使用方法
./gif.sh -i input.mp4 -o output.gif -s 320x240 -r 10
  • -i input.mp4:指定输入的视频文件,可以是 mp4、avi、flv、wmv 等格式。
  • -o output.gif:指定输出的 gif 文件路径。
  • -s 320x240:指定输出 gif 的尺寸,默认为输入视频的分辨率。
  • -r 10:指定输出的 gif 的帧率,默认为 15 帧每秒。
代码片段
#!/bin/bash
# 视频到 gif ffmpeg 调色板

PALETTE="/tmp/palette.png"
FILTERS="fps=15,scale=320:-1:flags=lanczos"

# 输入参数处理
while getopts "i:o:s:r:" arg
do
        case $arg in
                i)
                        INPUT_FILE=$OPTARG
                        ;;
                o)
                        OUTPUT_FILE=$OPTARG
                        ;;
                s)
                        SIZE=$OPTARG
                        ;;
                r)
                        FPS=$OPTARG
                        ;;
                ?)
                        echo "Usage: gif.sh -i input.mp4 -o output.gif -s 320x240 -r 10"
                        exit 1
                        ;;
        esac
done

# 默认为输入视频的分辨率
if [ ! $SIZE ]; then
        SIZE=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 $INPUT_FILE)
fi

# 默认为 15 帧每秒
if [ ! $FPS ]; then
        FPS=15
fi

# 生成调色板
ffmpeg -v warning -i $INPUT_FILE -vf "$FILTERS,palettegen" -y $PALETTE

# 使用调色板优化 gif 的色彩
ffmpeg -v warning -i $INPUT_FILE -i $PALETTE -lavfi "$FILTERS [x]; [x][1:v] paletteuse" -y $OUTPUT_FILE

echo "Output $OUTPUT_FILE"
参考链接