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

2024-05-08

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

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

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

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

标志是:

我们正在使用 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

该命令向动画添加徽标。

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命令,我们可以将它们变成一个命令吗?

或者您认为有机会将这一切四合一吗?任何意见都会非常感激。


更新答案

这是我对此的最佳尝试,它的运行时间约为原始答案的 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

这是我的想法......

  • 将深度设置为 8,因为我们使用的是 JPEG,设置gravity并初始化libjpeg's “负载收缩”特征,
  • 加载徽标并保存到 MPR,因为我们将使用它两次,
  • 开始一些“搁置处理” inside (...)加载before图像,调整其大小,粘贴徽标并保存到 MPR 供以后使用,
  • 重复上一步after image,
  • 将之前和之后的图像附加在一起并计算适合两者的组合色彩图并保存它,
  • 将前后图像映射到新的组合色彩图,
  • 删除所有垃圾,
  • 以一种方式制作动画,
  • 使另一个充满活力,
  • 使动画无穷无尽,并将动画保存为GIF,
  • 删除除第一帧之外的所有帧,调整其大小并另存为缩略图。

原答案

仍在进行中,但您可以避免前两次调用ffmpeg并在其中调整大小图像魔术师,然后一次性将徽标粘贴到顶部,如下所示:

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

to

-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%。


这是我的想法......

  • set the gravity首先,因为它是一个设置并保持设置直到更改,
  • 加载徽标并保存到 MPR,因为我们需要粘贴两次并且从磁盘读取两次很慢,
  • 开始一些“搁置处理” inside (...)加载before图像,调整其大小,粘贴徽标并保存到 MPR 供以后使用,
  • 重复上一步after image,
  • 删除所有垃圾,
  • 以一种方式制作动画,
  • 使另一个充满活力,
  • 使动画无穷无尽,并将动画保存为GIF,
  • 删除除第一帧之外的所有帧,调整其大小并另存为缩略图。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

消除 ffmpeg 和 image-magic 命令中的慢速因素 的相关文章

  • 用于裁剪和转置视频的 FFMPEG 命令放大后质量较差

    我正在尝试将尺寸通常为 960x720 的 mp4 视频转换为方形 480 480 视频 但它通常看起来被压扁 命令是 y i s vf crop 480 480 transpose d threads 5 metadata s v rot
  • ImageMagick 调整大小 - 设置横向和纵向图像的宽度

    我正在尝试将图像调整为给定宽度 按比例调整高度 无论图像是横向还是纵向 我有两张图像我测试了 ImageMagickconvert resize根据我所读到的命令 我希望以下内容适用于任何类型的图像 convert source jpg r
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • 如何从 Linux 命令行获取视频文件的分辨率(宽度和高度)?

    我一直在挖掘 mplayer mencoder 和 ffmpeg 文档 但我似乎无法想出anything 我对输出格式不是特别挑剔 因为我可以使用正则表达式将其拉出来 我只是似乎无法首先获取数据 Use ffprobe https ffmp
  • ffmpeg:音频样本的字节顺序

    我使用 ffmpeg 的 avcodec 从我的 C 应用程序中的音乐文件中检索原始音频样本 对于我测试的文件 这些文件样本的字节序似乎是小字节序 但我想知道对于我尝试解码的所有文件是否总是如此 即来自 ffmpeg 的实现或至少它的体系结
  • 使用 ImageMagick/convert 创建半透明 PNG

    我有 PNG 文件 我想将整个图像转换为半透明 该图像将在 KML 文件中引用为 Google 地球 地图中使用的图标叠加层 使用 ImageMagick 向我建议了以下示例convert命令 但似乎都不起作用 第一个示例会导致错误 usr
  • FFmpeg - 来自 NodeJS 的 RTMP 流,流比实时更快

    我的目标是在 Node 中渲染画布 并将该画布流式传输到 RTMP 服务器 最终是 Twitch 但现在我正在在本地 RTMP 服务器上测试 流式传输到 RTMP 的标准方式似乎是ffmpeg 所以我使用它 从 NodeJS 中作为子进程生
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • 如何在Mac上使用AVFoundation将图片编码为H264,而不是使用x264

    我正在尝试制作一个 Mac 广播客户端 使用 FFmpeg 但不使用 x264 库编码为 H264 所以基本上 我可以从 AVFoundation 中获取原始帧CMSampleBufferRef or AVPicture 那么有没有一种方法
  • FFMPEG:使用具有复杂滤波器的视频滤波器

    我正在使用fluent ffmpeg用于对视频文件执行批量操作的 Node js 库 视频过滤器裁剪 16 9 输入 添加填充并将字幕刻录到填充中 在下一步中 我想使用复杂的滤镜来覆盖图像作为水印 ff input video mp4 ff
  • 为什么处理时间随着修剪位置的增加而增加?

    我最近一直在使用ffmpeg修剪一些视频 我注意到随着修剪位置的增加 修剪视频所花费的时间也会增加 即使持续时间相同 5 seconds 下面给出了修剪视频的命令0 to 5秒 处理仅需1秒 ffmpeg y i input mp4 fil
  • Ffmpeg 无法正确转换为 ogg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在使用 ffmpeg 在我的网站上转换音频和视频 Ffmpeg 可以正确转换为其他格式 如 mp3 mp4 等 但无法正确转换为 ogg 虽然 f
  • 限制 Imagemagick 使用的空间和内存

    我在 Rails 应用程序上使用 Imagemagick 使用 rmagick 但我的服务器 Ubuntu 不是很大 当我启动转换进程时 Imagemagick 占据了我的服务器 30GB HDD 的所有位置 内存 我想限制内存和 tmp
  • 如何执行 ImageMagick 仅将多页 PDF 的第一页转换为 JPEG?

    我如何执行 ImageMagick 的convert如果我想要 JPEG仅从第一页开始多页 PDF 如果您使用的是convert命令行您可以使用以下参数执行它 convert source pdf 0 output jpeg 请注意 Ima
  • 如何让 Python 找到 ffprobe?

    I have ffmpeg and ffprobe安装在我的 mac macOS Sierra 上 并且我已将它们的路径添加到 PATH 中 我可以从终端运行它们 我正在尝试使用ffprobe使用以下代码获取视频文件的宽度和高度 impor
  • Android 中的 FFMpeg jni?

    我已经构建了 Bambuser http bambuser com opensource 提供的 FFMPEG 可执行文件和库 所以我设法构建了 Android 可执行文件和库 如何在 Eclipse 项目中链接这些库并从 Java 调用
  • FFmpeg av_read_frame 无法正确读取帧?

    好吧 我已经下载了一些 yuv 格式的原始 UHD 序列 并在 mp4 容器中使用 ffmpeg 对其进行编码 h264 4 4 4 100 质量 25fps 当我使用 ffprobe 找出编码了多少帧时 我得到 600 所以这是 24 秒
  • FFMPEG - 具有持续时间过滤器问题的连接解复用器

    我正在尝试使用图像生成视频ffmpeg concat 解复用器 我正在创建一个带有图像文件路径的文本文件 由于图像的持续时间可能不同 我正在使用duration过滤器指定每个图像的持续时间 示例文本文件如下 文件1 jpg 持续时间3 文件
  • ffmpeg计算视频比特率

    我想知道如何计算该视频的比特率 http jell yfish us media jellyfish 30 mbps hd hevc mkv http jell yfish us media jellyfish 30 mbps hd hev
  • Instagram 勒克斯效果

    Instagram 最近添加了一个 Lux 按钮 可以对您拍摄的照片进行自动对比 调平 我有一堆图片需要以类似的方式自动调平 使这些图片看起来更好 如果我想在 Imagemagick 中使用批处理命令 需要使用什么 秘密成分 我应该坚持对比

随机推荐