Recording videos from OFW application output

#1

Hello, I’ll have a project which I want to export videos (about 3k) in realtime from OFW app.

Do you have any recommendation of methods to do that?
Methods I’m wondering:
Recording syphon output via syphon recorder, but sometimes I can get inconsistent framerates and I think I can have better options.

Maybe using a Blackmagic Intensity Pro 4k installed in another computer and open a second window in fullscreen and record the best I can.

Or an Atomos Ninja V to use as a standalone recorder.

Wondered outputting uncompressed tif files to a RAMdisk in a computer

Any ideas?

#2

Ninja V works nicely for real-time rec but the quality is not the super super best if you compared with png sequence. It would be same result with blackmagic product due to use of proRes codec. If your project is serious for visual quality, I recommend to render to png.
Another option could be NDI, I haven’t tested though. And I remeber Nvidia card has a GPU recording feature but don’t know much about it.

+Edit
Ninja V and blackmagick might not support 3K resolutions.

+Edit2
Blackmagic supports RAW recording?

1 Like
#3

Great!
I think atomos record 4k (Up to 4Kp60)
with Apple ProRes HQ, 422, LT AVID DNxHR HQX. HQ, SQ, LB**
https://www.atomos.com/ninjav

Now about PNG do you think it is better than TIF? I suppose PNG bottleneck would be CPU to encode each frame, and TIF would be SSD Writing.
I’ve thought of recording RAW too, like a Tiff without header, and maybe using ramdisk if SSD writing is not fast enough.

#4

Thanks for the tips, I’ve researched NVIDIA Shadowplay, unfortunately Windows only.

About image sequences:
In fact i’ve just tested and measured each in millisseconds. (4000 x1200 RGB test)
save to png = 1200ms per frame
save to tiff in ssd = 292ms
save to tiff in ramdisk = 267ms
and saving the raw bytes direct to a file bypassing the tiff encoder = 40ms

it is a similar approach to @armadillu https://github.com/armadillu/ofxFastIOImage

I’m recording using

		fboRecording->getTexture().readToPixels(pixels);
		string fullFileName = "/Volumes/RAM/V_" + ofGetTimestampString() ;
		ofResetElapsedTimeCounter();
		
		ofFile f;
		f.open(fullFileName, ofFile::WriteOnly);
		ofBuffer buffer;
		size_t size = fbo2->getWidth() * fbo2->getHeight() * 3;
		buffer.set((char*)pixels.getData(),size);
		f.writeFromBuffer(buffer);
		f.close();
		
		cout << ofGetElapsedTimeMillis() << endl;

and later I can convert everything to tiff using this

	ofBuffer buffer = ofBufferFromFile("/Volumes/RAM/V_2019-06-03-00-21-45-184");
	ofPixels p;
	p.allocate(4000,1200, 3);
	memcpy(p.getData(), buffer.getData(), 4000*1200*3);
	ofSaveImage(p, "/Volumes/RAM/new2.tif");

and it is working great.

1 Like
#5

Wow, didn’t know that png is slow. PBO approach would be another option if you want to skip Tiff conversion. (like ofxTextureRecorder by arturo)

1 Like
#6

Great! I’ve written an uncompressed tiff writer, which is about 20-30% faster than ofw one, using SSD drive (no compression, faster to write but much bigger files)

I’ll try to use it within @arturo ofxTextureRecorder

1 Like