Skip to main content
Participating Frequently
May 31, 2013
Answered

Using the loopOut() expression always leaves the last frame blank, no matter what I do

  • May 31, 2013
  • 8 replies
  • 95698 views

The problem:

I've enabled Time Remapping on a composition and am using the loopOut() expression to repeat a 16 second animation until the end of the video.

When I apply the expression, it places a keyframe at the beginning of the clip and at the 16 second mark. When I look at the single frame at the 16 second mark, the composition is not visible. (The object boundaries are visible to scale/move but the image is not.) This also occurs at the 32sec mark, 48sec mark, 64sec mark...

The solution I found (that's not working for me):

  1. Create a new keyframe one frame before the 16 second mark
  2. Delete the keyframe at the 16 second mark

What happens instead:

Once I delete the keyframe at the 16 second mark, the keyframe at 15;29 becomes blank. The last keyframe will always be blank, no matter where it was placed, before or after the original.

If I have four keyframes and delete the last one (#4), the third keyframe will become blank. If I then delete the third keyframe, the second keyframe will become blank.

Any troubleshooting help would be appreciated.

Correct answer Teighe

The solution to this problem, that I found, was ridiculously simple. I just had to turn on the "continuously rasterize" icon (the little star burst) next to the "shy" icon. I hope that's helpful to anyone reading this post now.

8 replies

Participant
October 29, 2018

I found one thing that may create empty frame.
If you have frame rate 29.97 change it to 30.

That solve my problem.

Community Expert
October 29, 2018

Just changing the frame rate is no solution. The black frame rate in a loop is caused by the placement of the last keyframe. It is as simple as that. Changing the framerate of a comp or footage is going to give you other problems. Frames are Frames and time is time. Change the frame rate of footage and you change the time it takes to playback. Change the frame rate of a comp and the time stays constant but the number of frames changes. Most folks that did not grow up shooting motion picture film do not understand how frame rates and time relate to one another.

Community Expert
October 29, 2018

I do not have black frame i got blank/ empty frame like OP. And no of answers from here help me so i hope to help someone in similar situation.

If help it is a solution.


The problem is that most folks do not understand what a loop is. They also do not understand or even think about why time remapping sets the last keyframe after the last frame of the footage. There is no need to, and it's a bad idea to change the frame rate of the footage to fix the black frame problem. You just have to understand how and why both of these things work the way they do.

Let's say you set up a counter that counted the frames in your clip and rendered a movie that was 10 frames long. The first frame would be 0, the second 1 and so on until you get to the tenth frame that reads 9.

Now you set up time remapping and you get a keyframe at the start of frame 1 (0) and at the end of frame 9 which is the start of frame 11 (no number displayed because the clip has ended.

Now you add the loopOut() expression. Here's what happens. LoopOut uses keyframes. There are only two. The loop starts at the first keyframe and starts repeating at the last keyframe. The blank frame problem happens because the last keyframe is set to a frame that has no content. Most folks think the loop will immediately jump to the first frame but it doesn't. It plays the last frame. The next time the loop plays the last frame is dropped. Can you figure out why? The last frame is not repeated because if it was you would add one frame to the length of the clip every time it played back. You would not have a loop. You would have a situation where the video would be the length of the loop plus 1 frame every time it looped. This is not a loop. If the last frame was not dropped and you set up a clip to loop that was one second long by the time you got to 10 seconds the timing would be off by 10 frames.

If time remapping set a keyframe at the beginning of the last frame instead of at the end of it (the start of the next frame in time) you would ever be able to change the duration of the last frame.

The solution is not to change the frame rate, which changes the time it takes the clip to play, but to use the k key to jump to the last frame set by time remapping, use Ctrl + left arrow to move back one frame, set a keyframe for time remapping at the start of the last frame, delete the last keyframe and use loopOut to generate an accurate loop. It works every time. It generates a perfect loop if the first and last frames are identical. It does not foul up the timing.

I hope that makes sense. It does to me, and setting a keyframe at the start of the last frame of the media and deleting the last keyframe always works, no matter what the frame rate.

Participant
September 11, 2017

I've just had the same issue. I only get a single blank frame on the first loop around so it has to be a bug. I ended up just duplicating my comp for that single missing frame. Simple solution this time but I hope Adobe fix this bug.

Roei Tzoref
Legend
September 11, 2017

To make a prefect loop do this:

1. enable TR for the layer

2. Go one frame before the last TR keyframe And Add a keyframe (hit the diamond icon)

4. Copy the first TR keyframe over the last keyframe

5. Add the loopout expression

Participant
September 12, 2017

Thanks for taking the time to answer. This method did stop the blank frame problem on the first loop around, but at the expense of the last frame of my animation for all the subsequent loops (which start a frame early now). This knock-on effect is harder to spot than a blank frame but it is there. It still looks like a bug to me. Looping a Comp should be simple.

Participant
March 6, 2017

I am using loopOut() after enabling Time Remapping and at the end of the comp (which i'm trying to loop) I get a black frame, therefore I have selected the comp and in the timeline at the second diamond shape for the Time Remap (the last frame the Black one ) type in one less frame. exp: the comp which you want to loop is 215 frames therefore you can go ahead and type 214.

That solve it for me I hope it will do for you.

Known Participant
January 27, 2017

Just to confirm, I'd be messing about with keyframes for the last hour. I had a 24 frame animation had tried every which way... described in tutorials on YouTube in other threads on here. Using the pingpong method worked. But I wanted to get the cycle working as well.

As soon as I turned on the 'continuously rasterise' icon it worked like a charm.

Teighe
TeigheCorrect answer
Participant
October 31, 2015

The solution to this problem, that I found, was ridiculously simple. I just had to turn on the "continuously rasterize" icon (the little star burst) next to the "shy" icon. I hope that's helpful to anyone reading this post now.

rocios53101895
Participant
December 5, 2016

omfg I've been looking for like 30 mins for this! ughh. so stupid. thanks!!

Participant
June 12, 2014

In my case, moving time remapped frames resulted the last frame before 00:00:00 being blurred."Toggle hold keyframe" couple frames before the last worked for me.

Participating Frequently
May 31, 2013

I found out I can use the loopOut() expression on another composition with the new keyframe method outlined above, and it fixed the blank frame.

The same method does not work on the original composition in question, for whatever reason.

Fortunately, the loopOut("ping-pong") expression you mentioned will work for this animation, and that does remove the blank frame.

Mylenium
Legend
May 31, 2013

Well, time-remapping means time-remapping not frame-remapping. Everything happens on genuine time calculations and if your values are off by a fraction, sampling the discrete frames may simply end up in a blank area. This may not show up in the first few iteration cycles, but may become apparaent later as those minute discrepancies accumulate. Well, whatever, without seeing your project it's just guessing around...

Mylenium

Community Expert
May 31, 2013

This is normal behavior. Don't delete the keyframe at 16. Let me explain.

Let's say you have 2 keyframes for transparency. Frame 0 is 0 and frame 10 is 100. Adding the loop out expression to these keyframes will give you the following:

Frame Opacity

0 = 0

1 = 10

2 = 20

3 = 30

4 = 40

5 = 50

6 = 60

7 = 70

8 = 80

9 = 90

10 = 100

11 = 10

Then frame 19 will be 90 and frame 20 will be 0 and so on. This is because the animation loops between frame one and frame 10 which means it only reaches the value of frame 10 the first time through the loop. Every time after that the loop starts over at the first frame of the loop (frame 10, 20, 30 and so on).

This is normal. If you want frame 11 to be 0 then you'll need to add a keyframe there so you have an 11 frame loop instead of a 10 frame loop.

To solve your problem try backing up 1 keyframe from the end, inserting a new keyframe, and then leaving the last one. Now you have a seamless loop of all of your keyframes.

Does that make sense? The loopOut() method loop is exactly the same length as the keyframes to therefore the next frame after the loop has the same value as the second frame after the start of the loop and all subsequent loops will end one frame before the last keyframe. To make a continuous loop from 0 to 100 you need 3 keyframes. One at 0, two at 100 and 3 at 0.

You can also change the loopOut method from the default "cycle" to "pingpong" by writing loopOut("pingpong"). This would give you a smooth fade up and fade down between 0 and 100 because the loop goes back and forth between the first and last keyframes.

This is the way looping functions work in Java, 3D apps, and everywhere else that I have used them.

Participating Frequently
May 31, 2013

When I put a new keyframe 1 frame before the end, there are no visible changes. The last keyframe is still blank.

I can assign the last keyframe the timecode 00;01 instead of 16;00 and then the second-to-last keyframe becomes blank.

This feels like a bug more than anything. I understand where you're coming from, but After Effects isn't giving me the logical result.

Participating Frequently
May 31, 2013

Ok, I might be on to something...I need to do a little more testing but I think I've solved it. I'll report back in 30 minutes.