1. 安装ffmpeg、gifsicle:

brew install ffmpeg

brew install gifsicle

2. 执行转换命令

ffmpeg -i in.mov -pix_fmt rgb8 output.gif && gifsicle -O3 output.gif -o output.gif

 

添加-s 640x360,可以设置图像的大小为 640x360。添加-r 10,可以设置帧率为10:

ffmpeg -i in.mov -pix_fmt rgb8 -s 640x360 -r 10 output.gif && gifsicle -O3 output.gif -o output.gif

 

 

3. (可选)设置快捷执行命令

 

3.1 基础

alias v2g='function v2g(){ ffmpeg -i "$1" "${1%.*}.gif" && gifsicle -O3 "${1%.*}.gif" -o "${1%.*}.gif" && osascript -e "display notification \"${1%.*}.gif successfully converted and saved\" with title \"VIDEO to GIF SUCCESS!\""};v2g'

 

在命令行执行:v2g input_video.mov 即可

 

3.2  如果想自定义输出的gif文件名称,可以使用:

alias v2g='function v2g(){ ffmpeg -i $1 $2.gif && gifsicle -O3 $2.gif -o $2.gif && osascript -e "display notification \"$2.gif successfully converted and saved\" with title \"VIDEO to GIF SUCCESS!\""};v2g'

 

在命令行执行:v2g input_video.mov output_name即可,可以保存一个output_name.gif的文件

 

3.3 如果想有更多可选参数

function v2g() {
    src="" # required
    target="" # optional (defaults to source file name)
    resolution="" # optional (defaults to source video resolution)
    fps=10 # optional (defaults to 10 fps -- helps drop frames)

    while [ $# -gt 0 ]; do
        if [[ $1 == *"--"* ]]; then
                param="${1/--/}"
                declare $param="$2"
        fi
        shift
    done

    if [[ -z $src ]]; then
        echo -e "\nPlease call 'v2g --src <source video file>' to run this command\n"
        return 1
    fi

    if [[ -z $target ]]; then
        target=$src
    fi

    basename=${target%.*}
    [[ ${#basename} = 0 ]] && basename=$target
    target="$basename.gif"

    if [[ -n $fps ]]; then
        fps="$fps"
    fi

    if [[ -n $resolution ]]; then
        # resolution="-s $resolution"
    
    echo "ffmpeg -i "$src" -pix_fmt rgb8 -r $fps -s $resolution "$target" && gifsicle -O3 "$target" -o "$target""
        ffmpeg -i $src -pix_fmt rgb8 -r $fps -s $resolution "$target" && gifsicle -O3 "$target" -o "$target"
    
    else
        echo "ffmpeg -i "$src" -pix_fmt rgb8 -r $fps "$target" && gifsicle -O3 "$target" -o "$target""
        ffmpeg -i $src -pix_fmt rgb8 -r $fps "$target" && gifsicle -O3 "$target" -o "$target"
    fi

    # echo "ffmpeg -i "$src" -pix_fmt rgb8 -r $fps $resolution "$target" && gifsicle -O3 "$target" -o "$target""
    # ffmpeg -i $src -pix_fmt rgb8 -r $fps $resolution "$target" && gifsicle -O3 "$target" -o "$target"

    echo "\"$target successfully converted and saved\""
}

 

 

在命令行执行 v2g --src input_video.mp4 --target output_name --resolution 800x400 --fps 30, 其中target,resolution和fps是可选参数,当不传入的时候,output_name默认为输入文件的名字,分辨率默认为视频的分辨率,帧率默认为10帧。

 

黄世宇/Shiyu Huang's Personal Page:https://huangshiyu13.github.io/