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 can be a bit chaotic 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
  • Possibility to use motion PNG codec to support transparency/lossless proxies
  • 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?

I was sad to see this functionality lost as well, I used it to preview scenes with a compositor performing image manipulation. It was (almost?) the only way to buffer the compositor for a play-blast.

Just a notice to anyone interested:
I started working on this and will need a week or 2 to polish it

https://developer.blender.org/D3597

If you really really need this - it does work in current state.
please report issues :)

I can provide windows build, probably will try posting it on graphicall, I just need upload permission

Thanks for the test-build. I had to run it in compatibility mode for Windows 7 to get it to run on Windows 8.

It renders quick and you can't really live without the moving bars on the strips once you tried them. Great feature!

Also great with the option to select PNG and MJPEG(maybe other I-frame codecs like DNxHD and ProRes also could be included?).
This option properly should rename "Build JPEG quality" to "Bitrate" or something like that or else it will be confusing to ex. have JPEG quality in PNGs.

Unrelated to this commit, but IMHO the "checkbox and overwrite button" should be moved closer to the "Rebuild Proxy..." button and a "Delete proxy(ies)" button/function would be very nice to have. Maybe when viewing proxies, strips missing proxies, at the current % resolution, could have a red bar on top?

In my eyes this is a must-have-patch: No more rendering proxies in the "dark". Proxy generation at a great speed and selectable codecs for proxies.

This option properly should rename "Build JPEG quality" to "Bitrate percentage"

How about just "quality" ?
This is an excellent patch indeed, and a must-have for the VSE: big time saver, the progress bars on the strip are a much welcome addition. I haven't had any issues with the parallel rendering so far. The only minor issues or wishes I've found are linked to the proxies panel, and related to Blender's UX:

  • All strips use the PNG codec by default - it renders transparent video proxies for me. I have to manually change it to MJPEG on every video strip
  • There is no way to change the video codec or other proxy parameters on all selected strips with Alt like you can do on any property does not work in the Proxies panel (E.g. Alt click on "25%" to set all selected strips to use 25% proxies... well it's not a field so no way to use alt enter)

I'll stay available for testing and feedback if you need it.

Thank you for feedback!

Thanks for the test-build. I had to run it in compatibility mode for Windows 7 to get it to run on Windows 8.

strange, but thanks for info.

Also great with the option to select PNG and MJPEG(maybe other I-frame codecs like DNxHD and ProRes also could be included?).
This option properly should rename "Build JPEG quality" to "Bitrate" or something like that or else it will be confusing to ex. have JPEG quality in PNGs.

Quality parameter is not used with PNG codec.
I don't really know, how bitrate works with PNG as it is lossless, maybe it works with compression.

Adding codecs should be easy, PNG to me seemed like good choice for highest performance - not too much disk bandwidth and also CPU usage seems quite OK. But it's only 8-bit...

Unrelated to this commit, but IMHO the "checkbox and overwrite button" should be moved closer to the "Rebuild Proxy..." button and a "Delete proxy(ies)" button/function would be very nice to have. Maybe when viewing proxies, strips missing proxies, at the current % resolution, could have a red bar on top?

I don't want to make UI changes in this patch, that are not necessary for it's function
Delete proxies seems like a good idea

All strips use the PNG codec by default - it renders transparent video proxies for me. I have to manually change it to MJPEG on every video strip
There is no way to change the video codec or other proxy parameters on all selected strips with Alt like you can do on any property does not work in the Proxies panel (E.g. Alt click on "25%" to set all selected strips to use 25% proxies... well it's not a field so no way to use alt enter)

Sorry, forgot about this. But it's a quick to fix.
I will update this soon.

Sorry, forgot about this. But it's a quick to fix.
I will update this soon.

Thanks much Richard 🙂
I sincerely hope it gets merged then, it's a must-have for VSE users. Like all your patches 😄