当前位置: 首页 > 知识库问答 >
问题:

javascript - ffmpeg按位置合并两个gif,下面的命令有什么错误吗?

庄博厚
2023-11-14
ffmpeg -i left.gif -i right.gif -filter_complex "[0:v]format=rgb24[v0];[1:v]format=rgb24[v1];[v0]overlay=0:0[v2];[v2][v1]overlay=512:0" -y output.gifffmpeg version N-110495-g24f16b798e-https://www.martin-riedl.de Copyright (c) 2000-2023 the FFmpeg developers  built with Apple clang version 14.0.0 (clang-1400.0.29.102)  configuration: --prefix=/Volumes/ffmpeg_arm64/out --pkg-config-flags=--static --extra-version='https://www.martin-riedl.de' --enable-gray --enable-libxml2 --enable-gpl --enable-libfreetype --enable-fontconfig --enable-libbluray --enable-libsnappy --enable-libvmaf --enable-libass --enable-libklvanc --enable-libzimg --enable-libzvbi --enable-libaom --enable-libopenh264 --enable-libopenjpeg --enable-librav1e --enable-libsvtav1 --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libtheora  libavutil      58.  7.100 / 58.  7.100  libavcodec     60. 10.100 / 60. 10.100  libavformat    60.  5.100 / 60.  5.100  libavdevice    60.  2.100 / 60.  2.100  libavfilter     9.  7.100 /  9.  7.100  libswscale      7.  2.100 /  7.  2.100  libswresample   4. 11.100 /  4. 11.100  libpostproc    57.  2.100 / 57.  2.100Input #0, gif, from 'left.gif':  Duration: 00:00:02.01, start: 0.000000, bitrate: 16706 kb/s  Stream #0:0: Video: gif, bgra, 768x512, 7.92 fps, 8 tbr, 100 tbnInput #1, gif, from 'right.gif':  Duration: 00:00:02.01, start: 0.000000, bitrate: 16251 kb/s  Stream #1:0: Video: gif, bgra, 768x512, 7.92 fps, 8 tbr, 100 tbn报错Cannot find a matching stream for unlabeled input pad 1 on filter Parsed_overlay_2

两个gif,按位置排列,一个在左边,一个在右边,但是报错,应该怎么写?

共有1个答案

伍玮
2023-11-14

从给出的错误信息来看,问题似乎在于ffmpeg不能找到匹配的流来应用第二个overlay过滤器。在这种情况下,一个可能的原因是你试图在两个输入流之间应用overlay过滤器,但它们可能并不匹配。

在你的命令中,你试图将左边的gif(left.gif)叠加到右边的gif(right.gif)上。然而,如果这两个GIF的帧数、持续时间或其他属性不匹配,ffmpeg可能无法正确地执行这个操作。

一个可能的解决方案是确保两个输入流具有相同的属性,例如帧率、持续时间和分辨率。你可以使用以下命令来检查这些属性:

ffprobe -v error -select_streams v:0 -show_entries stream=width,height,duration -of csv="p=0" left.gifffprobe -v error -select_streams v:0 -show_entries stream=width,height,duration -of csv="p=0" right.gif

如果这些属性不匹配,你可能需要预先处理你的GIFs以确保它们可以正确地叠加。例如,你可以使用ffmpegscale过滤器来调整输入GIF的尺寸:

ffmpeg -i left.gif -vf "scale=768:512" left_resized.gif

然后,你可以尝试使用以下命令将调整后的GIFs合并:

ffmpeg -i left_resized.gif -i right.gif -filter_complex "[0:v]format=rgb24[v0];[1:v]format=rgb24[v1];[v0]overlay=0:0[v2];[v2][v1]overlay=512:0" -y output.gif

请注意,这只是一个可能的解决方案。具体的解决方案可能会根据你的具体需求和输入GIF的具体属性而有所不同。

 类似资料:
  • 是否可以使用如下命令:ffmpeg-ivideo_1920.mp4-vf size=640:360video_640.mp4-hide_banner来降低纯JavaScript中视频的分辨率。例如,我有一个下拉框

  • 问题内容: 当我单击一个按钮时,我想运行多种功能。例如,我希望我的按钮看起来像 当我执行此语句时,出现错误,因为我无法两次为参数分配内容。如何使命令执行多个功能。 问题答案: 您可以创建一个用于组合功能的通用功能,看起来可能像这样: 然后,您可以像这样创建按钮:

  • 两个gif放到上面两个框中,合并成一个,需要自定义宽高,可能还是一个左半边,一个右半边,这个要怎么实现?

  • 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 首先先给出链表节点ListNo

  • 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,