gpt4 book ai didi

ffmpeg - 消除 ffmpeg 和 image-magic 命令中的慢速因素

转载 作者:行者123 更新时间:2023-12-04 22:49:21 25 4
gpt4 key购买 nike

这些命令的基本思想是创建一个比较,(比较定义了一个来自过去的 jpeg 和一个来自现在的 jpeg,组合起来,例如它们将相互滑动并显示前后图像。)

例如https://media.evercam.io/v1/cameras/1lowe-scnoe/compares/lower-jreyh.gif

所有的命令都写在下面,做这些操作

  • 在图像之前调整大小。
  • 使用这两个图像创建一个 Gif。
  • 将日志添加到 Gif。
  • 从 GIF 创建 MP4 文件。
  • 从 mp4 文件创建缩略图。

  • 标志是:

    enter image description here

    我们正在使用 FFmpeg 和 ImageMagick 命令制作动画和 mp4 文件,例如
    ffmpeg -i before_image.jpg -s 1280x720 before_image_resize.jpg

    ffmpeg -i after_image.jpg -s 1280x720 after_image_resize.jpg

    上述命令首先调整将在动画中使用的两个图像的大小。

    此命令用于创建 gif。
    convert after_image_resize.jpg before_image_resize.jpg -write mpr:stack -delete 0--1 mpr:stack'[1]' \\( mpr:stack'[0]' -set delay 25 -crop 15x0 -reverse \\) mpr:stack'[0]' \\( mpr:stack'[1]' -set delay 27 -crop 15x0 \\) -set delay 2 -loop 0 temp.gif

    此命令用于向动画添加 Logo 。
    convert temp.gif -gravity SouthEast -geometry +15+15 null: evercam-logo.png -layers Composite compa-efxfphu.gif

    然后创建一个 mp4 文件为
    ffmpeg -f gif -i compa-efxfphu.gif -pix_fmt yuv420p -c:v h264_nvenc -movflags +faststart -filter:v crop='floor(in_w/2)*2:floor(in_h/2)*2' compa-efxfphu.mp4

    然后从这个 mp4 创建一个缩略图。
    ffmpeg -i compa-efxfphu.mp4 -vframes 1 -vf scale=640:-1 -y thumb-compa-efxfphu.jpg

    有没有可能减少这些步骤?这一切都需要很多时间,我只对 convert 感兴趣命令,我们可以将它们合并为一个命令吗?

    或者您是否有机会将这些全部 4 合二为一?任何输入将非常感激。

    最佳答案

    更新答案
    这是我最好的选择,它在原始答案的大约 50% 的时间内运行......

    convert -depth 8 -gravity southeast -define jpeg:size=1280x720   \
    logo.png -write MPR:logo +delete \
    \( before.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:before \) \
    \( after.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:after \) \
    +append -quantize transparent -colors 250 -unique-colors +repage -write MPR:commonmap +delete \
    MPR:after -map MPR:commonmap +repage -write MPR:after +delete \
    MPR:before -map MPR:commonmap +repage -write MPR:before \
    \( MPR:after -set delay 25 -crop 15x0 -reverse \) \
    MPR:after \( MPR:before -set delay 27 -crop 15x0 \) \
    -set delay 2 -loop 0 -write anim.gif \
    -delete 1--1 -resize 640x thumb.jpg
    这是我的想法...
  • 当我们使用JPEG时,将深度设置为8,设置gravity并初始化 libjpeg的“负载收缩”功能,
  • 加载 Logo 并保存到 MPR,因为我们将使用它两次,
  • (...) 内部开始一些“备用处理”加载 before图片,调整大小,粘贴到 Logo 上并保存到 MPR 以备后用,
  • after 重复上一步图片,
  • 将前后图像附加在一起并计算适合两者的组合颜色图并保存,
  • 将前后图像映射到新的组合颜色图
  • 删除所有垃圾,
  • 以一种方式制作动画,
  • 动画另一个,
  • 让动画无止境,将动画保存为GIF,
  • 删除除第一帧以外的所有帧,调整其大小并保存为缩略图。

  • 原答案
    仍在进行中,但您可以避免前两次调用 ffmpeg并在 内调整大小ImageMagick ,并且还像这样一次性将 Logo 粘贴到顶部:
    convert -gravity southeast logo.png  -write MPR:logo \
    \( before.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:before \) \
    \( after.jpg -resize '1280x720!' MPR:logo -geometry +15+15 -composite -write MPR:after \) \
    -delete 0--1 \
    MPR:before \( MPR:after -set delay 25 -crop 15x0 -reverse \) \
    MPR:after \( MPR:before -set delay 27 -crop 15x0 \) \
    -set delay 2 -loop 0 temp.gif

    如果您将最后一行从以下位置更改,您也可以使用该命令创建缩略图:
    -set delay 2 -loop 0 temp.gif
    -set delay 2 -loop 0 -write temp.gif \
    -delete 1--1 -resize 640x thumbnail.jpg

    您还可以使用 libjpeg 的“加载时收缩”功能加快速度并减少内存使用量。基本上,你在读取磁盘之前告诉它你需要多大的文件,它只读取文件的一个子集,从而减少 I/O 时间和内存压力:
    convert -gravity southeast logo.png  -write MPR:logo    \
    \( -define jpeg:size=1280x720 before.jpg -resize ... \
    \( -define jpeg:size=1280x720 after.jpg -resize ...
    这在我的机器上减少了大约 25-30% 的时间。

    这是我的想法...
  • 设置gravity首先,因为它是一个设置,并且在更改之前一直保持设置,
  • 加载 Logo 并保存到 MPR,因为我们需要将其粘贴两次并且从磁盘读取两次速度很慢,
  • (...) 内部开始一些“备用处理”加载 before图片,调整大小,粘贴到 Logo 上并保存到 MPR 以备后用,
  • after 重复上一步图片,
  • 删除所有垃圾,
  • 以一种方式制作动画,
  • 动画另一个,
  • 让动画无止境,将动画保存为GIF,
  • 删除除第一帧以外的所有帧,调整其大小并保存为缩略图。

  • enter image description here

    关键词:动画, 雨刷效果, 动画 GIF

    关于ffmpeg - 消除 ffmpeg 和 image-magic 命令中的慢速因素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52944497/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com