Skip to content

Frequently Asked Questions

brianchirls edited this page Feb 1, 2012 · 7 revisions

Frequently Asked Questions

Can I apply effects to YouTube videos?

Short answer: No.

Long answer: While YouTube does serve videos in an HTML5 player, they are encapsulated in an iframe. While it is theoretically possible to sneak around and link directly to the webm video, it is almost certainly against YouTube's terms of service. Even if it were allowed, it still wouldn't work. As a security measure, browsers do not allow Javascript pixel access to a video or image from a different domain (except in certain circumstances).

Any videos that you'd like to incorporate into a Seriously.js comoposition are best served from your own web server. If you're going to grab a video from YouTube or another service, it's up to you to ensure that you're following the relevant terms of service and copyright laws.

In which formats should I encode my videos?

Under normal circumstances you can get video working in all browsers by serving videos in webm, mp4, and OGG/Theora with a Flash fallback. But, as of now, only Chrome and Firefox support WebGL, so for Seriously.js, only webm is necessary. In the near future, Safari will likely support WebGL, so you may want to serve your videos as mp4/h.264 as well.

You can convert your video files easily using Miro Video Converter or, if you're more advanced, ffmpeg.

How big should I make my videos?

There are actually two factors here: the size of the video file and the pixel dimensions of the frame. In both cases, bigger is better in terms of image quality, but each has different trade-offs.

The size of the video file is determined by the data rate.

[File size] = [data rate] x [duration]

The greater the data rate, the longer it takes to download the file. You need to consider how fast a connection your users are likely to have. Do they live in a country without great broadband speeds? Are they mobile (not that Seriously.js works in most mobile browsers anyway)? Also consider whether you need the whole video file to finish downloading before it can start playing. Miro Video Converter provides built-in presets for data rates, and those may be fine for your needs. If not, experiment to see what works for you.

The pixel dimensions of your video are a somewhat different issue. This factor affects how high a frame rate Seriously.js can achieve when rendering your composition. Whatever data rate you use when compressing your video, before it can be displayed, each video frame is decompressed in memory to its full size. The amount of time it takes to move all those bytes around is proportional to the total number of pixels in the frame.

[bytes] = [height] x [width] x 4

You also have to decide how big to make the target canvas, which will affect how fast each effect can render. As a rule of thumb, 960 x 540 seems to work well enough for both. There's little point to having your video source be larger than the output canvas, unless you're applying a scaling or distortion effect. Remember, if you're mixing two videos at the same time, that's twice as many bytes to move around, so if your frame rate is too low, try decreasing the size of one or both videos.

You can also scale the canvas separately using CSS. Most sites using WebGL will render at a lower frame size than the actual window and then use CSS to scale to full screen.

Video encoding remains a dark and mysterious art. You'll have to experiment with both the pixel dimensions and the data rate to balance image quality against download time and frame rate.

Does this have anything to do with Node.js?

Short answer: No.

Long answer: Node.js is a platform for building network applications. Seriously.js is a node-based compositor. The use of the word "node" is a coincidence.

As Node.js typically runs on a server, Seriously.js runs "client-side" and requires a browser, so they don't work together. However, there is a WebGL module for Node.js, so it may be worth looking into adapting Seriously.js to run server-side in the future.

Seriously?

Seriously.

Clone this wiki locally