Hey folks. I've been afk/moving/extremely busy for a while. Sorry for not popping into this thread sooner ;)
I'll try and keep this short. Though I'll probably fail.
CRF-"Constant rate factor" in x264/libx264 Rocks, it's my fav. Liam hit the nail on the head with the CRF setting. Imo Its the most diverse rate setting available. The CRF option does an amazing job at figuring out where it can shave bits from to keep the file size down. Though admittedly I use 2 pass VBR for 90% of my local conversions. Their both good but CRF is defiantly the easiest way to get consistently good and fast 1 pass results.
B-frames: They improve image quality a ton. But the more bframes you use the harder it is to decode/playback. I've seen some videos use 80% of a core to render. On a laptop or a older machine it can make the video unplayable, appear jumpy or even lock up the browser.
Generally lots of B-Frames = Bad for streaming media and can slightly increase conversion times depending on other settings used. 1-4 is a good place to start.
However something worth noting is that Flowplayer deals Extremely well with higher numbers of bframes and reference frames.
Don't ask me how because I have no idea. But if you assemble a flash player in CS4 or use one of the many flash players available on the web, then toss in an mp4 with 16 bframes plus a pile of reference frames you'll see what I'm talking about.
I'm on a core 2 at 3.6ghz and a general flash player with a mp4@ 16 bframes/6+ reference frames and 1280x720 res will pin my cpu at 50-80%
However somehow flowplayer deals with this better than most flash players. Again I have no idea how it does it, but the cpu usage while being higher than a normal low bframe converted video is substantially lower than a standard run of the mill flash player. eg a 1280x720 video might use 30-50% with loads of bframes/ref frames.
Reference frames: Again loading on a ton of ref frames substantially increases the decoding requirements. Generally I never use more than 5 for any media I work with. But for web/streaming stuff I usually stick with 2 or 3 max and use the mixed refs option. "+mixed_refs add's to encoding time but it's only a slight increase and it's worth it quality wise imo."
It's also been said that using the high profile and levels of 4.1+ increases the decoding requirements. However after loads of testing it only seem to slightly increase the decoding requirements on a standard pc. If your converting for some specific device that's a different story. Currently I use the High profile and a level of 4.1 for everything I put in flowplayer.
-r "fps frames per second". Reducing the fps will reduce file size. But 90% of the time the resulting video is jumpy. I toyed around with setting all my conversions to 20 - 23.97. It failed. Now I don't touch the fps setting unless I have the time to re-convert it. Some source media can handle lower fps, some just can't. Best bet is don't mess with the fps unless you have some specific requirement to do so and the time to mess with re-encoding it over and over to find out just what it can handle.
Anamorphic and or changing the resolution:
As of late I have been downsizing all my conversions and using an Anamorphic res most of the time. Generally you will see a HUGE drop in conversion time with little loss in overall quality. Standard smaller hd res's 960x576 or even 720x480 can look extremely good using decent encoding settings.
Also reducing the res greatly increases your conversion fps/speed. Thus you can use higher settings for motion estimation, subme and trellis while keeping a somewhat sane conversion time.
Plus lower resolutions are easier to decode client side. I know everyone is all about HD everything but honestly there is very little true HD on the web. And what does exist is near impossible to watch/stream on a older machine or low end laptop.
So lower res = much faster encodes and easier to decode/watch.
Lately I've been using 848x352ish resolutions. Its tricky keeping the correct aspect ratio but its a really nice balance between 720x480 and 960x576. I use the fit scaling option in flowplayer. Word of caution flash with h264 can not to the best of my knowledge correctly display pixel aspect ratios for anamorphic resolutions. Keep a eye out for squishing lol. I've tried several players and all fail when using anything other than show all. I use the fit option in flowplayer but have to take care to make sure the resolution is mod 16, or correct for the true aspect ratio. I usually set PAR to 1x1. For local conversions use sx264 or Megui "links below" Both will calculate this correctly for you.
Here's an 16.6mb mp4 at only 720x304 3 ref's and 3 b-frames. The source was 1280x544 @ 105mb. Because it was converted at 720x304 the avg conversion fps was 40+ on a dual core cpu. And since its lower res and only 3 ref's and b-frames it will play pretty well on almost any pc with up-to-date flash.
I'm going for compatibility here not uber insane freaking amazing hd nor is it optimized for small file size.
http://static.bittnews.com/ink-2a.mp4 -Note: this was encoded with sx264 gui "link below" using 2 pass vbr. It would be the exact same size @ 1280x544 because of the settings used.
I'm currently stuck on a monitor with a max of 1440x900. In fullscreen its very watchable for me.