将图形文件从 webP 转换为 gif

将图形文件从 webP 转换为 gif

我下载了一些视频剪辑,它们的格式为 .webp。如何将它们转换为 .gif?我经常使用的聊天室只允许 .gif 和 .jpeg 文件。

我以前做过类似的事情但那已经是好久以前的事了而且我记不清该怎么做了。

答案1

我通过修改 Sean Mahan 编写的脚本来实现这一点,该脚本似乎是为 Arch Linux 设计的,我只是引用了变量(否则它在 Ubuntu 18.04.5 LTS 下会失败)。这是我使用的 Ubuntu 脚本。可以进一步修改它以包括检查以确保所有依赖项都已安装(如果没有,可以选择安装它们)。

#!/bin/bash

DELAY="${DELAY:-10}"
LOOP="${LOOP:-0}"
r=`realpath "$1"`
d=`dirname "$r"`
pushd "$d" > /dev/null
f=`basename "$r"`
n=`webpinfo -summary "$f" | grep frames | sed -e 's/.* \([0-9]*\)$/\1/'`
dur=`webpinfo -summary "$f" | grep Duration | head -1 |  sed -e 's/.* \([0-9]*\)$/\1/'`

if (( "$dur" > 0 )); then
    DELAY = "$dur"
fi

pfx=`echo -n $f | sed -e 's/^\(.*\).webp$/\1/'`
if [ -z "$pfx" ]; then
    pfx="$f"
fi

echo "converting "$n" frames from "$f" 
working dir "$d"
file stem "$pfx""

for i in $(seq -f "%05g" 1 "$n")
do
    webpmux -get frame "$i" "$f" -o "$pfx"."$i".webp
    dwebp "$pfx"."$i".webp -o "$pfx"."$i".png
done

convert "$pfx".*.png -delay "$DELAY" -loop "$LOOP" "$pfx".gif
rm "$pfx".[0-9]*.png "$pfx".[0-9]*.webp
popd > /dev/null
exit

解决方案依赖项:

  1. webp 包 2.imagemagick 包 3.当然还有 bash

答案2

Python 批量转换实用程序。基于上述贡献。
需要使用以下命令创建全局webp-to-gif可执行文件老年怪人的 Sean Mahan 代码......

#!/usr/bin/env python3
# -*- coding: utf8 -*-
print( "####################################################" )
print( "Uses webp-to-gif to convert multiple..." )
print( "Converts all found if no regex provided             " )
print( "args: [group regex: optional] [path: optional]      " )
print( "                                                    " )
print( "####################################################" )

import sys, os, fnmatch, itertools
import re

args = [x.replace('\\', '') for x in list(sys.argv)];  args.pop(0)
if len(args) == 1: args = args[0].split(' ')


print()
print()
print( "---------------------------------" )
print( "           Begin...              " )
print( "---------------------------------" )
print()
print()

regex = r'(.*)\.webp'
path = '.'
if len(args):
    regex = args[0]
    if len(args)>1:
        path = args[1]

os.chdir(path)
nn = 0
for f in os.listdir('.'):
    m = re.match(regex, f)
    if m:
        fn, e = os.path.splitext(f)
        os.system('webp-to-gif %s %s' % (f, '%s.gif' % (fn))) 
        print( '- Done for "%s"' % f )
        nn += 1

print()
print()
print( '---------------------------------' )
print( "%i matched" % nn )
print() 
print()
print( "---------------------------------" )
print( "             Done                " ) 
print( "---------------------------------" )
print() 
print() 

相关内容