TIL Blender is on Steam, and it works just fine with FFmpeg.
Also, I just dug up an old project and tried out the proxy-generation ahead of time (i.e. outside of Blender), and it works as intended.
For reference, to get this working:
ffmpeg -i "<inputfilename>" -vf "scale=iw*.5:ih*.5" -an -c:v mjpeg -q 1 "$PWD/BL_proxy/<inputfilename>/proxy_50.avi"
-
-vf
applies video filters, in this case scaling the image width iw
and image height ih
to 0.5 each.
-
-c:v mjpeg
specifies MJPEG as the codec, as that’s what Blender uses (I haven’t tested if other formats like PNG work).
-
-q 1
supposedly sets the JPEG quality. In the Blender options below there’s a slider for that, 1 should correspond to 100%. I don’t know what FFmpeg uses by default, the output says q=2-31
, but that shows whether I specify that option or not. The files do get bigger though so one would hope it’s also higher quality. edit: it’s actually showing q=1
while it’s encoding, but not in the output summary on top, no idea what the hell that’s about:
Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj420p(pc), 1280x720, q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc (default)
[...]
frame= 1297 fps= 71 q=1.0 Lsize= 171340kB time=00:00:21.61 bitrate=64932.3kbits/s speed=1.18x
-
-an
strips audio because it’s pointless to have (audio is taken from the audio sequence in the VSE)
Note that the -i
filename has to correspond to the subdirectories name if you’re using the “per strip” proxy storage option. There is also “per project”, but I haven’t played with that.
Then enable proxy usage in Blender:
Note that the checkbox on the bottom right has to be ticked, otherwise the proxy will not be used even when set in the proxy render size at the top. The checkboxes on the percentages in the Strip Proxy & Timecode panel are only used when generating proxies in Blender though.
Instead of proxy_50.avi
you can also use 25, 75, and 100 depending on your needs, and change the proxy size on the top accordingly.
Also a note on proxies and framerates: I did not find a way of changing the framerate of the proxy files inside blender, they seem to be 30 25 fps and it’s unrelated to the Scene’s framerate (my project was set to 60 from the start, but the proxies were still 25???), so the FFmpeg transcode seems to be the only option there since it retains whatever the fps was in the source file (unless otherwise specified).
I’m also not sure what blender does to proxy files when the sources have an alpha channel, and I don’t have source material to test with. MJPEG doesn’t support alpha because it’s JPEG, so it probably uses PNG instead? But I haven’t found documentation on it. The VSE in general isn’t all that well documented IMO, and it doesn’t help that they revamped the interface in 2.80, which was a good change but makes video guides a little awkward to work with at times.
PS: There is amazingly little documentation for each codec’s specific options on the FFmpeg documentation, which is really annoying. You can either go to the codec’s homepage and hope the options correspond to what’s in FFmpeg in some shape or form, or google around for hours on end…