Scene Proxies in the Video Sequence Editor
Open, Needs TriagePublic

Description

System Information
Windows 7 Ultimate, 64-bit, 32GB, 5960x, Nvidia Quadro FX 1800 (Primary) & GeForce 9800 GTX+ (Secondary)

Blender Version
Broken: (2.79a) Official builds
Worked: (2.79) Official builds

Short description of error

To cut a long story short @Campbell Barton (campbellbarton) disabled Scene proxies in the Video Sequence Editor because:

Looked into this and for now building proxies doesn't support anything besides movie, so disabling support for this.

rB6535f668b4733e354db7073c4edc82e6e820a678

This shocked me, have I been using Blender wrong? Because I've been happily doing this for months.

I don't quite understand the rationale behind the removal of is.

The main problem for me is that I have projects (made in 2.79 and earlier) that rely on scene proxies and when opening them up in 2.79a viewing or creating them doesn't work.

Now there are issues with Scene Proxies most notably the aforementioned (T54048) one and it can be really bad:


and
Other proxy issues

  • Skipping frames whilst rendering.
  • Properties side panel scrolls up after changing proxy location in the File Explorer.
  • Overwrite don't have the same behaviour as Overwrite does in the render setting (in the properties editor)
  • and inconsistent functionality.

But I've always treated this as an incomplete feature, (same way I treat NetRender, it's somewhat stable but is inconsistent. e.g. T52502) throwing in a bug report due to just crashing (T53792) and have been fine.

But now with the update, the Proxy/Timecode Panel is still there and does nothing. and as I said in my query to @Campbell Barton (campbellbarton)'s decision to disable this:

So, @Campbell Barton (campbellbarton) does this invalidate my bug report? T53792
Also, is it a good idea to disable this considering the Proxy/Timecode Panel option still there (or are you still working on this)?

With no information or feedback in the Blender Manual or when trying to create proxies (nothing happens), you are going to get users confused on a essential feature that worked (works fine in cycles for me (not the file names the crashing)) in 2.79 and now doesn't with no apparent reason why.


...generating proxies currently only works for movies...

No... they don't. They worked for Scenes before. (and they work for images for that matter)

...cancel until other types of sequence strips are supported...

What do you mean by this? That it's officially 'supported', documented?


Now that I've been trying to research around a bit, is this an incomplete feature or has it slowly gotten broken in time?
There's T43857 which uses a scene proxy. So there must be other uses who uses this right? Or was this just an example?
I would love to use this with Eevee; having the proxies rendered in no time and my GPU not getting taxed.


What I think to be good next steps:

  1. Having the functionality back as it was before.
  2. An open task to deal with the Other proxy issues.

Exact steps for others to reproduce the error
Zipped folder with a working Blender file and proxy:
Tested in Ubuntu VM both 2.79 and 2.79a with reproducible behaviour.^
Tested on a separate laptop with both 2.79 and 2.79a with reproducible behaviour.^
(Note: In my Ubuntu VM I had to toggle Textured Solid button in the Scene Preview/Render Panel to get the proxy showing in 2.79.)
(^ Reproducible behaviour being: fully working in 2.79 and not working at all in 2.79a)

I'm sure this was just a misunderstanding.
Yours,
A passionate Blender user

Details

Type
Bug

Adding @Sergey Sharybin (sergey) & @Bastien Montagne (mont29) as after a quick search seem to be the most active on the subject of VSE Proxies.


So...
It has been well over a month since I first asked about the code change (T54048#485618) and a month since this task's submission.
I completely understand if no administrator can undertake this (code quest, moving etc..), all I ask is for this to be looked over.
And after some advice/motivation I guess I'll keep nagging about it untill something happens.
I mean this has slipped past the release of 2.79a and 2.79b so I'm writing this early in hopes this will not get missed in 2.80 or maybe in a 2.79c release.

In the interest of saving time (whatever the modern day equivalent of telephone tag is)

If it is decided to reinstate scene proxies

I can:

  1. Create tasks (from other proxy issues)
  2. Give details on the issues/behaviour/bugs
  3. Give expected behaviour
  4. Show use cases (2.80, Eevee,..etc)
  5. Give opinions on behaviour/functionality/design
  6. Give functionality (expected limitations)

Anything else? Any other information required?

If it is decided to completely remove (and not support) scene proxies

Then: feel free to
bigbadbugreport

my reports (T54259, T53792)

and please remove the Proxy/Timecode Panel from properties.

and a valid reason for the removal of this!.

Is it possible to get this looked over before 2.8 beta?

Hello.
I was proposing change(D3484) for VSE proxy system.

As I looked at code I realized, that the way we are generating names for proxies may lead to problems, so I was thinking about redoing that part already.

Do you want me to help?

I am also interested in a resolution to this bug.

I would say that if this is to be truly removed, in addition to the removal of the proxy panel, the 'proxy' property in the python api should be removed for this sequence type.
I have a vse addon that (among other things) will automatically enable proxies on sequences that have proxy support, and right now the scene sequence type does still have all the proxy settings.

@ International Space Station

I'd love to help. Though I can just about (barely) read code.
But I'm fine to bounce off ideas from.

In terms of the VSE (and the MCE's) Video Proxy naming and structure.
I'm not quite sure if @Bastien Montagne (mont29)'s asset manager (T46049) will cover
this in anyway, shape or form.

Unless you would like to tackle some of the other issues?

But yeah... any help will be appreciated.

I have looked at the code, where the problem lies - the main problem is that we want to generate MJPEG video for proxies instead of a bunch of jpeg images. Making filename would be quite silly reason for dropping functional feature...

I'd love to help. Though I can just about (barely) read code.

That's about my position as well :)

what I found is:

index_rebuild_ffmpeg creates avi proxies from movies, seems by converting them to image with ffmpeg API, then packed to proxy AVI by index_rebuild_ffmpeg_proc_decoded_frame
along with index_rebuild_fallback as an "alternative", which uses imbuf to get images, then AVI_write_frame to make proxies

old system (images) used function seq_proxy_build_frame which also uses imbuf (AFAIK generated images will use imbuf)

So last two functions probably can be glued (at least with my skills) together...

I will look into that and post patch eventually.

From my use of video proxies (in VSE and MCE) if a video is an image sequence
there is no frame rate or time code so it's rendered as an image sequence.
But for a video there is a frame rate so it's kept as a video.

Though I do agree that it is a bit strange to have image sequences, video files, and timecode files.
I think T54117's issue stems from this.
In terms of performance I would assume that AVI MJPEG video files are superior to
read (Sequentially) over images (Random) if the drive ever got fragmented.

Also all video proxies are rendered at 25 fps (even if below 25 fps) not quite sure why or for what reason.

For the scene strip proxies - you're going to be rendering a scene - so you've got a timebase/framerate to render the (.avi) proxy.
But would it be possible to resume rendering of a AVI MPEG proxy?

No, we want only AVIs for proxies.
For consistency sake, I would generate AVI even for image, just 1 frame long video maybe for speed reasons.
Also if it was up to me, I would like to make it possible, so every image generating sequence could have proxy.

We can make proxies at arbitrary frame rate, because we are reading them frame by frame, not constrained to timeline.

The code for generating images already exists, we can look at rendering code maybe, thing is, that we need not to output images, but pack them into a video.

Now there are two engines to do this - internal AVI encoder and FFMPEG.
It seems, that internal AVI enc will happily eat rendered frames and output a video, but it may be possible, that devs would prefer FFMPEG, which seems to need to define video stream, image format and stuff like that.

I will definitely need to play with this for a little while, until I get familiar with the code

Image proxies can be useful tho, what about transparent images/sequences? It would be nice if these were proxied in a way to preserve that transparency.

Image proxies can be useful tho, what about transparent images/sequences? It would be nice if these were proxied in a way to preserve that transparency.

We can encode alpha channel in video, but I am not sure if we can read it back. But it should be possible in theory at least.
Or we can encode alpha in separate BW video, but that's ugly.

Anyway I have run a trial, and successfully created AVI proxies of scene, meta, and effect sequences using internal AVI encoder. Maybe colorspace was totally off, but I have an output at least :)

I have looked in the ffmpeg portion and I don't get this timecode files - is this even applicable outside of the movies? Doesn't look like it is...

What I would like to do is:

  • write support for generating proxies for _all_ types of sequences
  • have 2 or 3 generators - movie, images (+) other sequences
  • merge proxy API to one place
  • possibility to invalidate proxy (useful mainly for effects)
  • multithreading (POC: D3484)

Maybe change UI:

  • add default proxy settings in userpref, so adding new sequence can use these
  • rebuild all/invalid/selected operator
  • show state(validity etc) / progress in timeline (POC: D3484)

@Sergey Sharybin (sergey), you seems to be most involved in this. I know, that focus is on 2.8 branch, but can you please leave some comment about what do you think about this?