FFMPEG output is blocky
Option placement matters


  Is there an option I'm missing?


No, but option placement matters. Options before the input apply to the input, and options before the output generally apply to the output. The exception are global options. See the FFmpeg synopsis and FFmpeg description for more details on option placement.

Therefore, you must move your -q (alias for -qscale) option:

ffmpeg -i video_test.avc -q:v 2 frames/frames_%04d.jpg



-f image2 is superfluous here since ffmpeg knows that your outputs are images.
A sane range for -q:v for the encoder mjpeg is 2-5; lower is higher quality.
It is recommended to be explicit as to which stream you want to apply -q to since ffmpeg can not know if it should be applied to video or audio, so in your case use -q:v. This is good practice, although it does not matter for your input since you have no audio.


A fake "ffmpeg"


  I've noticed that FFMPEG on my Mac works as expected and generates nice frames, but FFMPEG on my production server that runs Ubuntu exhibits this problem.


Ubuntu no longer uses FFmpeg:


Who can tell me the difference and relation between ffmpeg, libav, and avconv?
The FFmpeg/Libav situation


Since I do not use the fork my answer may not work for you.

Getting ffmpeg

FFmpeg development is very active and it is always a good idea to use a recent version. Two main ways of getting it are:


Follow a step-by-step guide to compile ffmpeg
Use an already compiled ffmpeg build (instructions)