tnfe / FFCreator

A fast video processing library based on node.js (一个基于node.js的高速视频制作库)
http://tnfe.github.io/FFCreator/
MIT License
2.85k stars 405 forks source link

一个场景里顺序播放两个图片动画,设置了动画的delay和time,然而第二张的图片会全程遮挡第一张 #253

Closed changqing91 closed 2 years ago

changqing91 commented 2 years ago

一个4s的场景中连续播放两张图片(zoompan)动画各2s,结果整个场景都会播放第二张图片,addEffect和addAnimate都试过,如果不使用alpha值就会产生此问题,但是不想让整个场景变白所以不希望使用alpha来解决。

//图片1
{ width: 720, height: 576, duration: 2 } 
//图片1动画
{
  from: { x: -3835.84, y: -1309, scale: 10.555555555555555 },
  to: { x: -3526.66, y: -1153.6, scale: 9.777777777777779 },
  time: 2,
  delay: 0
}

// 图片2
{ width: 720, height: 576, duration: 2 } 
// 图片2动画
{
  from: { x: -3165.46, y: -1329.43, scale: 10.722222222222221 },
  to: { x: -3512.54, y: -1539.07, scale: 11.777777777777779 },
  time: 2,
  delay: 2
}
drawcall commented 2 years ago

Your problem does not appear, please check the examples code

changqing91 commented 2 years ago

For example:

var { FFCreator, FFImage, FFScene } = require('ffcreator')
var creator = new FFCreator({
  output: `./test/mars.mp4`,
  width: 720,
  height: 1600
})

var scene = new FFScene()
scene.setDuration(4)

var image1 = new FFImage({
  path: `./mars.png`,
  width: 500,
  height: 500,
  x: 0,
  y: 0
})
image1.addAnimate({
  from: { x: -200, y: -100, scale: 2 },
  to: { x: -220, y: -110, scale: 3 },
  delay: 0,
  time: 2
})
image1.setAnchor(0, 0)

var image2 = new FFImage({
  path: `./mars.png`,
  width: 300,
  height: 300,
  x: 0,
  y: 0
})
image2.addAnimate({
  from: { x: -220, y: -110, scale: 3 },
  to: { x: -200, y: -100, scale: 2 },
  delay: 2,
  time: 2
})
image2.setAnchor(0, 0)

scene.setBgColor('#ffffff')
scene.addChild(image1)
scene.addChild(image2)

creator.addChild(scene)
creator.start()

怎么使image1只在前2s显示,image2只在后2s显示

drawcall commented 2 years ago

参考examples image

changqing91 commented 2 years ago

我用了addAnimate,再用addEffect会影响动画 只能用alpha来实现,不想透明度变化的效果

deiphi commented 2 years ago

我也遇到同样的问题,不知道能否在时间到达的时候再显示相关资源。

drawcall commented 2 years ago

use the remove method, see examples/image.js

deiphi commented 2 years ago

@drawcall 大佬您好,我在images.js里面并没有找到remove的api,能不能具体一点,举一个例子,非常感谢!

drawcall commented 2 years ago

https://github.com/tnfe/FFCreator/blob/master/examples/image.js

deiphi commented 2 years ago

@drawcall 感谢大佬回复,可能我和题主没有表达清楚。 我们想要的效果其实是,两张图片先后出现,比如image1在第1秒开始做动画,5秒后消失,image1消失后image2才开始出现,n秒后消失。 然而,目前要实现这种效果,只能设置form: {alpha: 0},to{alpha:1},但这种方式会导致fade in的效果。

如果不想要fade in效果,我找到另一种实现的方式,就是稍微麻烦一点:

// 首先设置alpha:0,让图片隐藏 var image2 = new FFImage({ path: ./mars.png, width: 300, height: 300, x: 0, y: 0, alpha: 0 })

image2.addEffect('backIn', 0, 5); // 在第5秒的时候瞬间显示图片 image2.addEffect('moveRight', 0.5, 5); // 再执行动画 scene.addChild(image2)

drawcall commented 2 years ago
// 9s remove
flogo2.remove(9);

after 9s disappear

deiphi commented 2 years ago

@drawcall 感谢大佬!