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

ffmpeg - ffmepg中gif执行zoompan时长不正确?

蒋烨然
2024-01-15

我这里有一段ffmpeg命令,第一张图片是gif,设置时长是4.29秒,我的音频文件是4.29秒,然后设置了动画,帧数是129帧,因为我后面设置帧率是30,30乘以4.29=129。但是最后生成的视频,第一个gif时间超过了1分钟,应该怎么改这个命令。

ffmpeg -t 4.295999999999999 -i tmp-62202-sW2Xus3nI87j-.gif -i tmp-62202-mjX3kTD7u8Dr-.mp3 -t 1.8 -i tmp-62202-I6Qz5o2BV7zV-.jpeg -i tmp-62202-igsEL46QAWbi-.mp3 -y -filter_complex "[0:v]zoompan=z='1.2':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,1),(ih/zoom)/2,y-1)':d=129:s=768x512[v0];[2:v]zoompan=z='1.2':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,-1),0,y+1)':d=54:s=768x512[v2];[v0][1:a][v2][3:a]concat=n=2:v=1:a=1[v][a];" -map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart -shortest -r 30 1.mp4

我的gif是2秒,一秒8帧的gif。

共有1个答案

左丘元徽
2024-01-15

从你给出的ffmpeg命令中,我看到你试图将一个GIF(2秒,1秒8帧)和两个音频文件以及一个静态图片通过zoompan滤镜进行缩放和移动,然后将它们连接在一起。

问题可能出在你的zoompan滤镜设置上。在你的命令中,你为每个输入都设置了zoompan滤镜,但是你没有设置输出时长。zoompan滤镜的d参数定义了动画的持续时间,但这个持续时间应该与你的输入GIF的时长一致,而不是帧数。在你的情况下,你的GIF时长是2秒,所以你应该将d设置为2秒,而不是129帧。

此外,你的GIF时长是2秒,但是你的输出视频时长是4.29秒,这可能也会导致问题。你应该确保输出视频的总时长与你想要的实际时长一致。

下面是一个可能的修改后的命令:

ffmpeg -t 4.295999999999999 -i tmp-62202-sW2Xus3nI87j-.gif -i tmp-62202-mjX3kTD7u8Dr-.mp3 -t 1.8 -i tmp-62202-I6Qz5o2BV7zV-.jpeg -i tmp-62202-igsEL46QAWbi-.mp3 -y -filter_complex "[0:v]zoompan=z='1.2':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,1),(ih/zoom)/2,y-1)':d=4.29:s=768x512[v0];[2:v]zoompan=z='1.2':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,-1),0,y+1)':d=1.8:s=768x512[v2];[v0][1:a][v2][3:a]concat=n=2:v=1:a=1[v][a];" -map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart -shortest -r 30 1.mp4

在这个命令中,我假设你的GIF的时长是4.29秒,你的第一个音频文件的时长是1.8秒,而你的第二个音频文件没有变化。同时,我也假设你的静态图片时长与第一个音频文件一致。

请注意,这个命令可能仍然不能完全满足你的需求,你可能需要根据你的具体情况进行调整。

 类似资料:
  • 我是android编程的新手,这是一种抽象,我对ndk不太了解,但如果我是对的,有很多带有java包装的ffmpeg库可以直接使用。我可以将它们导入到我的项目中,但不知道如何使用它们通过它们执行ffmpeg命令。您能给我推荐任何特定的库,以及如何使用它们来执行ffmpeg命令吗?

  • 我目前使用的是mysql 我有两个名为person和zim_list_id的表,这两个表都有超过200万行

  • 高倍速ffmpeg命令: ffmpeg.exe -rtsp_transport tcp -i "rtsp://admin:m1111111@172.11.1.82:554/cam/playback?channel=1&subtype=0&starttime=2023_07_06_14_26_00&endtime=2023_07_06_14_31_00&speed=16" -an -vcodec c

  • rstp-stream(https://www.npmjs.com/package/node-rtsp-stream)并在-js文件中执行以下配置:Stream=require('node-rtsp-stream');stream=新流({name:'name', StreamURL:'rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov', Ws

  • 我正在用arquillian为我的应用程序中的持久层编写一些测试。我想使用一个持久化扩展来填充数据库等。问题是一个测试大约需要15-25秒。正常吗?还是我做错了什么?我已经尝试在本地postgres数据库(每次测试~10sec)、远程postgres数据库(每次测试~15sec)和本地容器上的hsqldb(每次测试~15sec)上运行这些测试。 提前致谢 附注。当我不使用“持久化扩展”12测试大约

  • 问题内容: 我正在做一个游戏,但是每当我运行第二个jFrame时,我都必须调整它的大小才能获得第二个jFrame的正确大小,有人知道为什么吗? 这是第一个jFrame类中的方法,它将打开第二个类: 这是第二个jFrame类,我必须重新调整它的大小才能正确显示山雀: 问题答案: 我读得很快,正在寻找一种特定的方法。 该方法是: JFrame中的此方法可能非常有用,但也很难处理,您需要非常了解如何设置