Article Addendum: 'Video characterization creates hands-on headaches', July 25, 2002

This'll be a 'living' document; I'll periodically update it with additional evaluation results on both existing and new codecs, plus additional links that I come across. So occasionally check back, and drop me an email with any feedback. Thanks!

July 12, 2002

Reference clips

Below you'll find the twenty Video Quality Experts Group clips I used in my study. The '625' (PAL) clips are 25 fps with 720x576 pixel resolution, while the '525' (NTSC) clips are 30 fps with 720x486 pixel resolution. See the print article's table 1 for file sizes. To convert them to AVIs, first run them through Stewart Worrell's VQEG2STD program (you can convert multiple files in one session with a batch file), then through his YUV2AVI utility, using the following settings:

Input YUV File = FILENAME
YUV Format = 4:2:2
Output Format =  AVI File, 25 (PAL) or 30 (NTSC) Frame Rate, Disable Compression
Number of Frames = 222 (PAL) or 262 (NTSC), 1x From Source
Frame Resolution = 720x576 (PAL, from drop-down list) or 720x486 (NTSC, type in custom resolution)

From http://media.xiph.org/vqeg/TestSequences/Reference (high speed downloads, but is sometimes down)

First-frame thumbnail images

From the EDN website (moderate speed downloads) From http://ftp.crc.ca/test/pub/crc/vqeg/TestSequences/Reference (slow downloads)

First-frame thumbnail images

src1_ref__625.yuv

Thumbnail

Thumbnail

src1_ref__625.yuv

Thumbnail

src2_ref__625.yuv

Thumbnail

Thumbnail

src2_ref__625.yuv

Thumbnail

src3_ref__625.yuv

Thumbnail

Thumbnail

src3_ref__625.yuv

Thumbnail

src4_ref__625.yuv

Thumbnail

Thumbnail

src4_ref__625.yuv

Thumbnail

src5_ref__625.yuv

Thumbnail

Thumbnail

src5_ref__625.yuv

Thumbnail

src6_ref__625.yuv

Thumbnail

Thumbnail

src6_ref__625.yuv

Thumbnail

src7_ref__625.yuv

Thumbnail

Thumbnail

src7_ref__625.yuv

Thumbnail

src8_ref__625.yuv

Thumbnail

Thumbnail

src8_ref__625.yuv

Thumbnail

src9_ref__625.yuv

Thumbnail

Thumbnail

src9_ref__625.yuv

Thumbnail

src10_ref__625.yuv

Thumbnail

Thumbnail

src10_ref__625.yuv

Thumbnail

src13_ref__525.yuv

Thumbnail

Thumbnail

src13_ref__525.yuv

Thumbnail

src14_ref__525.yuv

Thumbnail

Thumbnail

src14_ref__525.yuv

Thumbnail

src15_ref__525.yuv

Thumbnail

Thumbnail

src15_ref__525.yuv

Thumbnail

src16_ref__525.yuv

Thumbnail

Thumbnail

src16_ref__525.yuv

Thumbnail

src17_ref__525.yuv

Thumbnail

Thumbnail

src17_ref__525.yuv

Thumbnail

src18_ref__525.yuv

Thumbnail

Thumbnail

src18_ref__525.yuv

Thumbnail

src19_ref__525.yuv

Thumbnail

Thumbnail

src19_ref__525.yuv

Thumbnail

src20_ref__525.yuv

Thumbnail

Thumbnail

src20_ref__525.yuv

Thumbnail

src21_ref__525.yuv

Thumbnail

Thumbnail

src21_ref__525.yuv

Thumbnail

src22_ref__525.yuv

Thumbnail

Thumbnail

src22_ref__525.yuv

Thumbnail

As mentioned in the print article, I was unfortunately not able to secure permission to post either the original or lossy-compressed versions of the University of Hannover clips. Rob Koenen, president of the MPEG-4 Industry Forum, reports that his organization is developing freely distributable test clips. Regularly check the consortium's website for more details.

Doug Dixon from Sarnoff Labs also reports that the SMPTE (Society of Motion Picture and Television Engineers) has D1 format digital video library clips available for purchase. They're currently offered on tape, and DVD-based versions are under development.

Software settings

Settings for all of the software I used in compressing the reference AVI clips are listed below for your reference:

Global software settings

JNDmetrix
InputReferenceFile=FILENAME
InputReferenceFrameIndex=0
InputTestFile=FILENAME
InputFullColor=1
InputFieldInterlace=0
InputFieldRate=0
InputReferenceCrop=0, 0, 0, 0
InputTestCrop=0, 0, 0, 0
InputBorder=16
ViewDistance=4
ViewRoomAmbient=3.0
ViewDisplayBlack=16.0
ViewDisplayGamma=2.25
ViewDisplayLuminance=70.0
ViewDisplayPhosphor=0
OutputLogFile=FILENAME
OutputMapType=0
OutputMapFormat=BMP
OutputMapScale=10
OutputChannelLog=0
InputReferenceFormat=800
InputTestFormat=800
InputReferenceHeader=0
InputTestHeader=0
InputReferenceResolution=0, 0
InputTestResolution=0, 0
InputReferenceContiguous=0
InputTestContiguous=0
InputReferenceColorSample=0, 0
InputTestColorSample=0, 0
InputReferenceLumaCalc=0
InputTestLumaCalc=0

Windows Media Encoder 8
-allstats
-input FILENAME
-output FILENAME

Adobe Premiere
General window:
    File Type: LSX-MPEG Encoder
    Range: Work Area
    Export Video
Video window:
    Pixel Aspect Ratio: Square Pixels (1.0)
Audio window: nothing
Keyframe and Rendering window:
    Fields: No Fields
Special Processing window (all defaults):
    Gamma: 1.0
    Noise Reduction: None
    Better Resize: Off
    Deinterlace: Off
    Cropping: Off

LSX-MPEG
Pixel aspect ratio 1:1
Video format NTSC
Assume input luminance is 16 to 235 (CCIR-601)
Audio tab (default):
    Audio bitrate = 128 kbps

MPEGable
Preprocessing:
    Crop top: 0 (default)
    Crop bottom: 0 (default)
    Crop left: 0 (default)
    Crop right: 0 (default)
    Downsampling factor: 1x (default)
    Target framerate: Same as input (default)
    In/Out Point: All Frames (default)
    Deinterlace: off
Audio:
    Channels: Same as input (default)
    Precision: Same as input (default)
    Sample Rate: Same as input (default)
Encoding:
    Keyframe Period: 100 frames (default)
    Image Quality/Motion Smoothness: Very Smooth Motion
    Compression Quality/Encoding Speed: High Quality
    Buffer Size: 5 seconds (default)
Interoperability:
    Profile: Advanced Simple Profile
Streaming:
    Add Hint Track: disabled (default)
    RTP Packet Size: 500 (default)

Hannover CIF encoding software settings

JNDmetrix
InputTestFrameIndex=0 (MPEG-4), 1 (WMV8)
InputFrameCount=(reference clip frame count) (MPEG-4), (reference clip frame count minus 1) (WMV8)

Windows Media Encoder 8
-v_mode 0 (1-pass), 1 (2-pass)
-v_bitrate 300000 -v_quality 45 (for funfair_cif)

Adobe Premiere
Video window:
    Frame Size: 352x288
    Frame Rate: 30

LSX-MPEG
Output Type = MPEG-4
Motion Estimation 10 (out of 20, frame, default)
Bit Rate tab:
    Constant bitrate, bitrate = 300 kbps
Motion Vectors tab (all defaults):
    For P frames, maximum horizontal motion vector 32, maximum vertical motion vector 32
Sequence tab (default):
    Number of P frames between nearest I frames:15
MEG-4 tab (all defaults):
    Simple profile, level 3
    Enable unrestricted motion estimation
    Enable advanced prediction mode

MPEGable
General:
    Total bitrate 300 kbps (except funfair_cif = 400 kbps)

VQEG D1 encoding software settings

JNDmetrix
InputTestFrameIndex=0 (MPEG-2), 1 (WMV8)
InputFrameCount=(reference clip frame count) (MPEG-2), (reference clip frame count minus 1) (WMV8)

Windows Media Encoder 8
-v_mode 2 (1-pass), 3 (2-pass)
-v_bitrate 800000

Adobe Premiere
Video window:
    Frame Size: 720x576
    Frame Rate: 25

LSX-MPEG
Output Type = MPEG-2
Motion Estimation 16 (out of 20, frame, default)
Bit Rate tab:
    Variable bitrate, maximum bitrate 8000 kbps, rate control mode=keep specified average bitrate of 800 kbps
Motion Vectors tab (all defaults):
    For P frames, maximum horizontal motion vector 32, maximum vertical motion vector 32
    For B frames, maximum horizontal motion vector 16, maximum vertical motion vector 16
Group of Pictures tab (all defaults):
    Sequence (versus Headers (GOP))
    Number of P frames between nearest I frames = 3
    Number of B frames between nearest P frames = 2
Detect tab (default):
    No Scene Change Support
Input tab (all defaults):
    Encoded chroma format: 4:2:0
    Filter: None
MPEG-2 tab (all defaults):
    Main Profile & Main Level
    Sequence Display Extention: Disable Display Extention

MPEGable
General:
    Total bitrate 800 kbps (except src9_ref__625 and src_17__525 = 1000 kbps)

My MPEG-2, MPEG-4 and Windows Media Video results (published in article)

Here's a sneak peak at the results that will appear in the second part of my print article, in EDN's August 8 issue.

Clip

Codec

Reported average bitrate (bps)

Reported peak bitrate (bps)

Total file size (bytes)

Encoding time (sec)

JND sequence average

Hannover (30 fps, CIF, 300 kbps CBR)

coastguard_cif

MPEG-4 Simple Profile Level 3 (1)

333,433

N/R (80 byte max buffer size)

416,791

0:37.00

5.995

WMV8 (1-pass) (2)

370,529

N/R (2532 ms buffer delay)

473,319

0:15.00

5.124

WMV8 (2-pass)

360,060

N/R (2233 ms buffer delay)

462,069

0:27.00

5.116

container_cif

MPEG-4 Simple Profile Level 3

316,382

N/R (80 byte max buffer size)

395,477

0:35.00

4.924

WMV8 (1-pass)

372,586

N/R (2613 ms buffer delay)

477,069

0:15.00

3.76

WMV8 (2-pass)

347,181

N/R (1847 ms buffer delay)

447,069

0:25.00

3.796

dancer_cif

MPEG-4 Simple Profile Level 3

322,871

N/R (80 byte max buffer size)

336,310

0:26.00

5.437

WMV8 (1-pass)

385,827

N/R (2530 ms buffer delay)

413,307

0:15.00

4.661

WMV8 (2-pass)

369,789

N/R (2085 ms buffer delay)

394,557

0:23.00

4.765

foreman_cif

MPEG-4 Simple Profile Level 3

326,900

N/R (80 byte max buffer size)

408,625

0:30.00

5.273

WMV8 (1-pass)

371,962

N/R (2574 ms buffer delay)

477,069

0:15.00

4.337

WMV8 (2-pass)

356,394

N/R (2125 ms buffer delay)

458,319

0:25.00

4.432

funfair_cif

MPEG-4 Simple Profile Level 3

693,344

N/R (80 byte max buffer size)

722,204

0:22.00

5.818

WMV8 (1-pass)

452,714

N/R (4388 ms buffer delay)

480,807

0:15.00

6.141

WMV8 (2-pass)

449,562

N/R (4301 ms buffer delay)

480,807

0:25.00

6.122

hall_monitor_cif

MPEG-4 Simple Profile Level 3

316,495

N/R (80 byte max buffer size)

435,181

0:30.00

4.639

WMV8 (1-pass)

366,595

N/R (2874 ms buffer delay)

518,325

0:15.00

3.744

WMV8 (2-pass)

348,904

N/R (2082 ms buffer delay)

492,075

0:24.00

3.858

mobile_cif

MPEG-4 Simple Profile Level 3

605,336

N/R (80 byte max buffer size)

756,670

0:26.00

5.421

WMV8 (1-pass)

373,664

N/R (2781 ms buffer delay)

477,069

0:15.00

5.066

WMV8 (2-pass)

368,326

N/R (2574 ms buffer delay)

473,319

0:25.00

5.028

mother_daughter_cif

MPEG-4 Simple Profile Level 3

316,735

N/R (80 byte max buffer size)

395,919

0:24.00

3.809

WMV8 (1-pass)

369,748

N/R (2521 ms buffer delay)

473,319

0:14.00

2.987

WMV8 (2-pass) (3)

322,919

N/R (970 ms buffer delay)

413,319

0:23.00

3.026

silent_cif

MPEG-4 Simple Profile Level 3

317,005

N/R (80 byte max buffer size)

396,256

0:27.00

4.643

WMV8 (1-pass)

370,933

N/R (2587 ms buffer delay)

477,069

0:14.00

3.682

WMV8 (2-pass)

352,237

N/R (2055 ms buffer delay)

450,819

0:23.00

3.691

singer_cif

MPEG-4 Simple Profile Level 3

320,180

N/R (80 byte max buffer size)

333,508

0:21.00

4.747

WMV8 (1-pass)

384,977

N/R (2522 ms buffer delay)

409,557

0:12.00

3.844

WMV8 (2-pass)

364,685

N/R (1958 ms buffer delay)

390,807

0:18.00

4.029

stefan_cif

MPEG-4 Simple Profile Level 3

515,912

N/R (80 byte max buffer size)

644,890

0:29.00

5.601

WMV8 (1-pass)

418,236

N/R (4111 ms buffer delay)

533,319

0:14.00

5.117

WMV8 (2-pass)

414,621

N/R (3990 ms buffer delay)

529,569

0:27.00

5.043

table_cif

MPEG-4 Simple Profile Level 3

315,978

N/R (80 byte max buffer size)

394,972

0:42.00

5.817

WMV8 (1-pass)

371,626

N/R (2713 ms buffer delay)

477,069

0:14.00

4.577

WMV8 (2-pass)

355,910

N/R (2363 ms buffer delay)

458,319

0:27.00

4.652

VQEG (25 or 30 fps, D1, 800 kbps VBR)

src1_ref__625

MPEG-2 Main Profile, Main Level (4)

1,328,000

1,477,000

1,507,021

0:24.00

3.082

WMV8 (1-pass)

94,725

N/R

113,381

0:29.00

2.965

WMV8 (2-pass)

176,006

N/R

250,881

0:59.00

2.017

src2_ref__625

MPEG-2 Main Profile, Main Level

1,921,000

2,252,000

2,185,949

0:27.00

4.379

WMV8 (1-pass)

3,285,142

N/R

3,695,881

0:41.00

4.596

WMV8 (2-pass)

1,026,428

N/R

1,160,881

1:11.00

5.43

src3_ref__625

MPEG-2 Main Profile, Main Level

1,681,000

2,126,000

1,913,747

0:30.00

4.724

WMV8 (1-pass)

1,975,818

N/R

2,225,881

0:44.00

5.07

WMV8 (2-pass)

806,782

N/R

920,881

1:12.00

5.64

src4_ref__625

MPEG-2 Main Profile, Main Level

1,068,000

1,170,000

1,212,468

0:24.00

4.86

WMV8 (1-pass)

743,980

N/R

843,381

0:30.00

4.605

WMV8 (2-pass)

2,294,409

N/R

2,570,881

1:03.00

3.765

src5_ref__625

MPEG-2 Main Profile, Main Level

2,763,000

3,501,000

3,157,432

0:25.00

5.412

WMV8 (1-pass)

2,685,041

N/R

3,023,381

0:55.00

4.72

WMV8 (2-pass)

743,704

N/R

840,881

1:39.00

6.854

src6_ref__625

MPEG-2 Main Profile, Main Level

2,586,000

3,513,000

2,937,214

0:26.00

5.141

WMV8 (1-pass)

3,297,068

N/R

3,710,881

1:08.00

5.036

WMV8 (2-pass)

896,440

N/R

1,010,881

1:53.00

6.275

src7_ref__625

MPEG-2 Main Profile, Main Level

1,995,000

2,737,000

2,269,385

0:26.00

5.311

WMV8 (1-pass)

1,547,846

N/R

1,745,881

0:51.00

4.968

WMV8 (2-pass)

690,172

N/R

790,881

1:27.00

6.235

src8_ref__625

MPEG-2 Main Profile, Main Level

1,514,000

2,124,000

1,725,938

0:26.00

5.442

WMV8 (1-pass)

752,914

N/R

853,381

0:38.00

5.472

WMV8 (2-pass)

565,228

N/R

650,881

1:11.00

5.769

src9_ref__625

MPEG-2 Main Profile, Main Level

2,851,000

3,440,000

3,242,691

0:26.00

5.043

WMV8 (1-pass)

3,255,146

N/R

3,663,381

0:59.00

4.578

WMV8 (2-pass)

876,408

N/R

990,881

1:44.00

6.992

src10_ref__625

MPEG-2 Main Profile, Main Level

2,134,000

2,763,000

2,429,882

0:27.00

4.656

WMV8 (1-pass)

2,901,714

N/R

3,265,881

0:39.00

4.552

WMV8 (2-pass)

771,744

N/R

880,881

1:10.00

5.994

src13_ref__525

WMV8 (1-pass)

2,238,032

N/R

2,478,381

0:44.00

4.747

WMV8 (2-pass)

792,620

N/R

890,881

1:18.00

6.27

src14_ref__525

WMV8 (1-pass)

516,641

N/R

578,381

0:35.00

5.069

WMV8 (2-pass)

739,090

N/R

830,881

1:06.00

4.813

src15_ref__525

WMV8 (1-pass)

3,203,799

N/R

3,545,881

0:40.00

4.763

WMV8 (2-pass)

891,324

N/R

990,881

1:10.00

5.668

src16_ref__525

WMV8 (1-pass)

587,690

N/R

655,881

0:32.00

5.1

WMV8 (2-pass)

714,096

N/R

800,881

1:01.00

4.831

src17_ref__525

WMV8 (1-pass)

2,321,294

N/R

2,570,881

0:44.00

4.759

WMV8 (2-pass)

796,535

N/R

890,881

1:17.00

6.435

src18_ref__525

WMV8 (1-pass)

560,061

N/R

625,881

0:32.00

3.985

WMV8 (2-pass)

845,338

N/R

940,881

1:04.00

3.511

src19_ref__525

WMV8 (1-pass)

2,011,014

N/R

2,228,381

0:55.00

4.833

WMV8 (2-pass)

757,579

N/R

850,881

1:36.00

6.756

src20_ref__525

WMV8 (1-pass)

294,746

N/R

333,381

0:31.00

4.307

WMV8 (2-pass)

973,645

N/R

1,080,881

1:01.00

3.377

src21_ref__525

WMV8 (1-pass)

304,759

N/R

343,381

0:37.00

4.906

WMV8 (2-pass)

524,807

N/R

590,881

1:08.00

4.448

src22_ref__525

WMV8 (1-pass)

2,541,671

N/R

2,815,881

0:41.00

5.672

WMV8 (2-pass)

778,921

N/R

870,881

1:09.00

6.816

N/R = Not reported

  1. MPEG-4 average bitrates were determined by converting the encoded file size from bits to bytes then dividing by the clip play time. Encoding times were determined by subtracting each file's 'created' time stamp from its 'modified' time stamp (note possible system rounding).
  2. WMV8 average bitrates were determined via the encoder output report. Encoding times were determined by capturing the system clock value just prior to, and just after, encoding.
  3. I re-ran this clip through the encoding, transcoding and analysis flows because initial command line interface options inadvertently resulted in one-pass compression
  4. MPEG-2 average and peak bitrates were determined using the freeware Bitrate Viewer utility. Encoding times were determined via an undocumented technical support debug mode's report output.

Below, please find the main article text that corresponds to the above table. I didn't include the entire part 2 article (ie sidebars, references, company contact info, etc) so stay tuned for the August 8 issue.

Results du jour

As you analyze the results in the table, keep in mind the original mammoth file sizes. Comparing them with the compressed file sizes in the table, you should be impressed with how well the codecs retain a semblance of the original image at such significantly slimmed bit rates. I resist drawing any definitive conclusions from the table because, depending on what clip or combinations of clips represent the kind of video media you typically encode and whether encoding speed, resulting file size, image quality, or some combination of these variables in an application-specific priority ordering is important to you, you’ll likely reach a different conclusion from other readers. As I put on various applications’ “sets of eyes,” I consequently interpret the data in unique ways.

The most important question to ask up-front is whether JNDmetrix results correlate to the quality differences I observed. I am confident that JNDmetrix is doing all that it claims to do and that its results are meaningful beyond its MPEG heritage. The codec-versus-codec numbers matched what my eyes and brain interpreted, and it was fascinating to peruse the report files and see how the frame-to-frame JNDmetrix number variances matched changes in scene complexity and transitions between key and delta frames.

The JNDmetrix reports give per-frame results for both luma and chroma; combine them, placing a higher priority on luma, as does the human visual system; and then average the per-frame results to give a clip result. I intended to put not only the clip average, but also the “best” and “worst” frame results in the table. However, Dixon convinced me that this approach would unfairly represent the codecs, because one or two “bad” frames in an otherwise-solid clip would be acceptable to the eyes. I still think that standard-deviation numbers in the reports would be useful, however. Options I didn’t enable further break down the numbers into various color channels, and you can even obtain per-frame bit maps to display the pixel-versus-pixel variances from reference to test clip. As you compare the JND numbers for the codecs and settings, the following guidelines from Sarnoff's documentation may be of benefit:

"A 1 JND rating indicates a 75% probability of seeing a difference between two images (vs. 50% guess). Two image sequences below 1 JND apart cannot be distinguished, even when the exact nature and location of differences are known in advance. Two image sequences below 3 JNDs apart are not obviously different. Differences are visible, but only when an observer knows exactly where to look. At 5 JNDs, differences are readily apparent. In probability terms, a 2 JND difference corresponds to a 93.75% probability of discrimination (0.7510.753(120.75)), and a 3 JND difference corresponds to a 98.44% probability. Although probability of discrimination asymptotes quickly as a function of JNDs, the units are useful because they correspond to roughly linear magnitudes of subjective visual difference."

One of the first things you might notice is that the codecs  only rarely achieved an encoded bit rate that was near, at, or below the 300- or 800-kbps target—a disappointing fact. Admittedly, I intentionally chose many challenging clips. But when I tell an encoder that I want a certain average bit rate, regardless of whether I’m encoding with VBR or CBR, the encoder should hit that bit rate without my having to do iterative work.

When you specify CBR encoding in WMV8, you might expect the Windows Media Encoder to deliver a bit stream with a constant number of bits per video frame. Look closely at the WMV encoding report files, though, and you discover that the Windows Media Encoder delivers a constant transport rate stream with bounded bit-rate variance on a frame-by-frame basis. Note the term “bounded.” The encoder defines an intermediate buffer, whose size the encoded bit stream communicates to the decoder. Streaming CBR clips from a server results in an initial buffer-filling delay before playback begins. However, a frame’s or a sequence of frames’ encoded bits are never large enough to exceed the available playback-buffer size.

WMV’s VBR mode follows the customary unbounded per-frame bit-rate definition the industry uses. One-pass VBR mode, according to Microsoft documentation, prioritizes the specified quality over the specified bit rate, whereas two-pass VBR flips these variables’ priorities. A comparison of the one- and two-pass numbers by and large validate these suppositions, though a few baffling contradictions existed. More generally, look at whether the longer encoding times of two-pass mode in both CBR and VBR encoding result in higher-enough JNDmetrix quality measures for the types of media you’re interested in.

The Ligos CBR encoder, like all modern codecs that support a mix of key and delta frames, is also a bounded-bit-rate VBR technology. Analysis of the MPEG-4 bit streams in Interra's M4 software verifies the presence of a mix of I and—theoretically much smaller—P frames, correlating to the encoder defaults during compression. Note that the MPEG-4 Simple Profile Level 3 decode buffers are much smaller than those that Windows Media Video requires. This memory-density difference may be important in cost-conscious consumer-electronics devices.

JNDmetrix-analysis comparisons of MPEG-4 and WMV8 bear out what my eyes saw. When the MPEG-4 files were smaller than the WMV8 files, large smeared areas appeared in the MPEG-4 images, whereas the WMV8 images contained detail. More important, with comparably sized files, MPEG-4 contained more large “blocky” artifacts and other irregularities, such as significant loss of facial details. The poor quality extends to MPEG-4 files significantly larger than those of WMV8. But keep in mind that those artifacts would be far less disagreeable on a tiny cell- phone screen display than on the large monitors I viewed them on. And, because I couldn’t measure processor load during decoding, MPEG-4 Simple Profile may—and from anecdotal information, probably does—have an advantage in this regard over WMV8.

Comparing MPEG-2 with WMV8, like MPEG-4 versus WMV8, provides an intriguing industry standard-versus-proprietary tradeoff that was one of my fundamental motivations for this study. I also hoped to infer some measure of the viability of advanced video codecs in conjunction with mature red-laser technology as an alternative to blue lasers for high-definition DVD. WMV8 generally achieved image quality moderately lower than, to comparable to, MPEG-2 with slightly to significantly smaller files than MPEG-2. But it did so with the trade-off of much slower encoding. Keep in mind that WMV8 encoding ran as a bare-bones DOS command-line utility, whereas the MPEG-2 and -4 encoders ran as a plug-in under Adobe Premiere. MPEG-encoding speeds in a simpler configuration might be even faster. And keep in mind, too, that WMV8 is months’ old technology lacking bit-stream backward-compatibility constraints that other codecs have; MPEG-2 is nearing its 10th birthday and has bit-stream-format constraints.

Onward and upward

Until recently, I thought that the reason JNDMetrix only supported the AVI and MPEG formats was because it integrated AVI and MPEG file-wrapper parsers (It also inputs sequences of still image files at one per frame.) I was half-right. Actually, JNDmetrix hands off any file with a MPG extension to the PC’s DirectShow filter stack for parsing. So, I theoretically may not need to decode a compressed file to AVI but could simply rename its file extension as MPG, although this technique doesn’t currently seem to be working with MPEG-4.

I’m concerned, too, given my quality-degrading attempt to transcode MPEG-2 to lossless AVI, that the Vegas Video WMV decoder might be doing more quality damage than simply tacking on redundant frames, adversely and unfairly affecting the WMV scores. After Sarnoff adds support in JNDmetrix for DirectShow decoders that implement seeking via not only frame-stamping (currently supported) but also time-stamping, I'll try WMV-to-MPG renaming. Microsoft has also promised me a more reliable WMV-to-AVI transcoder. I’ll communicate any difference in the results to you via the Web-site addendum.

I'd like to obtain JNDmetrix results for MPEG-4 Advanced Simple Profile, for both the CIF- and D1-resolution reference clips. The MPEG-4 encoder in Apple Computer's QuickTime Version 6 Public Preview supports both Simple and Advanced Simple profiles and saves in both MP4 and Premiere-friendly MOV file formats. Unfortunately, it significantly prioritizes per-frame quality, offers limited adjustment of quality settings, and consequently drops frames unless I encode to very high bitrates. For example, I had to encode the mobile_cif clip to 800 kbps to preserve frames, making comparisons against both Ligos' Simple Profile and Microsoft's Windows Media Video 8 meaningless. Dicas' encoder, from my limited experimentation thus far, offers more quality options and should produce more comparable bitrates. Check the Web site addendum for the data.

I’d like to test other codecs via transcoding to AVI or through the DirectShow rename-to-MPG loophole. WMV9, code-named Corona, is due out later this year and on my evaluation wish list. Other candidates include the open-source VP3 codec from On2 Technologies, which the company is offering to the Internet Streaming Media Alliance as an alternative to license-fee-burdened MPEG-4, and the company’s more advanced, proprietary VP5 codec. DivX 5 is on my list, too. Apple’s embrace of MPEG-4, coupled with its current legal quagmire with former partner Sorenson, has diminished the importance of evaluating Sorenson Video. I might also again try deinterlacing the VQEG clips with a more robust Cleaner, Adobe AfterEffects, Canopus ProCoder or VirtualDub algorithm, but this task is low-priority.

Although I'd like to look at RealVideo, RealNetworks isn't cooperating, despite numerous discussions it conducted during the past few months, both with me and with Sarnoff. Real-Networks isn't confident in JNDmetrix's analysis results, and the company's programs don't supply a DirectShow filter that I can tap into. Third-party workarounds, such as Tinra and TechSmith's Camtasia exist, but RealNetworks can easily dismiss their transcoding accuracy. As a result, I depend on obtaining software from RealNetworks that decodes RealVideo to AVI, a series of still images, or some other format that JNDmetrix accepts.

I’d also like to assess how much my choice of computing hardware and operating system influenced my results. My motherboard supports the addition of a second PIII-800 CPU, and I also plan to install the multitasking Windows 2000 OS in a separate hard-drive partition. I also have a Pentium 4-based system that will be useful in case I determine that any of the encoders support and can performance-benefit from the CPU's SSE2 instruction set.

In all cases, after I, as a mainstream user, complete my work, I’ll hand the reference AVIs to the codec vendors, as more advanced users, for optimized encoding. Numerous optimization options are possible, including processing the video before encoding it and as part of the subsequent decode; adjusting intermediate buffer sizes: altering the I, P, and B frame proportions and patterns—going so far, perhaps, as to manually insert key frames; and tweaking the quality and other encoder settings. In all cases, though, I’ll insist that what the vendors provide me in response are 300-kbps CBR and 800-kbps VBR clips, the original targets of this project.

After my and the vendors’ work is complete, my overriding goal is to have assembled a foundation that you can build on with your own analysis. How do the results differ at bit rates other than the ones I chose? Will slight tweaks to the encoder settings enable MPEG bit rates to more closely approximate my original 300- and 800-kbps targets with little to no loss in quality? Can the WMV encoder, through altered settings, speed up  compression while matching or even exceeding the quality levels I saw? I look forward to hearing from you, and to adding your data to this article’s Web-site addendum.

My MPEG-4 Advanced Simple Profile results (not published in article)

Below you'll find the results of my testing on MPEG-4 Advanced Simple Profile. I encoded the source files to MP4 format in Dicas's mpegable S4, and decoded them back to uncompressed AVIs in Apple's Quicktime 6 Public Preview, prior to running them through JNDmetrix.

Clip

Codec

Reported average bitrate (bps)

Reported peak bitrate (bps)

Total file size (bytes)

Encoding time (sec)

JND sequence average

JND sequence average (alternate) (2)

Hannover (30 fps, CIF, 300 kbps CBR)

coastguard_cif

MPEG-4 Advanced Simple Profile (1)

296,132

~350,000 (5 second buffer size)

370,165

0:32.00

6.831

7.283

container_cif

MPEG-4 Advanced Simple Profile

288,522

~450,000 (5 second buffer size)

360,653

0:30.00

4.816

5.215

dancer_cif

MPEG-4 Advanced Simple Profile

301,672

~375,000 (5 second buffer size)

314,242

0:26.00

10.050

8.534

foreman_cif

MPEG-4 Advanced Simple Profile

293,481

~400,000 (5 second buffer size)

366,851

0:36.00

8.137

9.185

funfair_cif

MPEG-4 Advanced Simple Profile (3)

520,904

~550,000 (5 second buffer size)

542,608

0:28.00

11.685

10.009

hall_monitor_cif

MPEG-4 Advanced Simple Profile

291,752

~425,000 (5 second buffer size)

401,159

0:38.00

5.295

5.554

mobile_cif

MPEG-4 Advanced Simple Profile

312,779

~400,000 (5 second buffer size)

390,974

0:39.00

6.902

7.091

mother_daughter_cif

MPEG-4 Advanced Simple Profile

284,694

~400,000 (5 second buffer size)

355,868

0:35.00

5.006

5.340

silent_cif

MPEG-4 Advanced Simple Profile

285,250

~525,000 (5 second buffer size)

356,562

0:36.00

7.458

8.543

singer_cif

MPEG-4 Advanced Simple Profile

287,319

~475,000 (5 second buffer size)

299,291

0:29.00

5.785

5.519

stefan_cif

MPEG-4 Advanced Simple Profile

343,301

~475,000 (5 second buffer size)

429,126

0:39.00

8.347

9.353

table_cif

MPEG-4 Advanced Simple Profile

283,753

~425,000 (5 second buffer size)

354,691

0:37.00

8.063

8.561

VQEG (25 or 30 fps, D1, 800 kbps VBR)

src1_ref__625

MPEG-4 Advanced Simple Profile

785,485

~2,750,000 (5 second buffer size)

871,888

1:25.00

2.594

4.453

src2_ref__625

MPEG-4 Advanced Simple Profile

810,018

~1,000,000 (5 second buffer size)

899,120

1:38.00

6.425

7.004

src3_ref__625

MPEG-4 Advanced Simple Profile

795,163

~1,000,000 (5 second buffer size)

882,631

1:53.00

7.461

10.421

src4_ref__625

MPEG-4 Advanced Simple Profile

776,242

~1,200,000 (5 second buffer size)

861,629

1:45.00

5.710

9.674

src5_ref__625

MPEG-4 Advanced Simple Profile

1,002,505

~1,200,000 (5 second buffer size)

1,112,781

1:56.00

7.276

12.722

src6_ref__625

MPEG-4 Advanced Simple Profile

1,000,741

~1,300,000 (5 second buffer size)

1,110,822

1:56.00

6.582

14.326

src7_ref__625

MPEG-4 Advanced Simple Profile

818,164

~1,000,000 (5 second buffer size)

908,162

1:53.00

6.971

15.862

src8_ref__625

MPEG-4 Advanced Simple Profile

763,754

~1,000,000 (5 second buffer size)

847,767

1:49.00

6.558

15.143

src9_ref__625

MPEG-4 Advanced Simple Profile (4)

1,268,946

~1,500,000 (5 second buffer size)

1,408,530

1:39.00

6.746

14.199

src10_ref__625

MPEG-4 Advanced Simple Profile

816,002

~1,000,000 (5 second buffer size)

905,762

1:55.00

7.123

9.326

src13_ref__525

MPEG-4 Advanced Simple Profile

906,214

~1,000,000 (5 second buffer size)

989,284

1:52.00

10.934

10.308

src14_ref__525

MPEG-4 Advanced Simple Profile

785,938

~1,000,000 (5 second buffer size)

857,982

1:51.00

9.354

9.377

src15_ref__525

MPEG-4 Advanced Simple Profile

792,454

~1,000,000 (5 second buffer size)

865,096

1:55.00

8.645

8.504

src16_ref__525

MPEG-4 Advanced Simple Profile

796,970

~1,500,000 (5 second buffer size)

870,026

1:47.00

11.307

10.205

src17_ref__525

MPEG-4 Advanced Simple Profile (4)

1,118,002

~1,500,000 (5 second buffer size)

1,220,485

1:30.00

11.046

12.753

src18_ref__525

MPEG-4 Advanced Simple Profile

769,834

~1,200,000 (5 second buffer size)

840,402

1:34.00

4.778

4.495

src19_ref__525

MPEG-4 Advanced Simple Profile

918,756

~1,200,000 (5 second buffer size)

1,002,975

1:53.00

11.814

10.838

src20_ref__525

MPEG-4 Advanced Simple Profile

743,306

~1,400,000 (5 second buffer size)

811,442

1:48.00

5.341

4.300

src21_ref__525

MPEG-4 Advanced Simple Profile

751,523

~1,200,000 (5 second buffer size)

820,413

1:51.00

7.815

7.726

src22_ref__525

MPEG-4 Advanced Simple Profile

807,165

~1,000,000 (5 second buffer size)

881,155

1:54.00

10.414

9.698

Notes:
1. MPEG-4 average bitrates were determined by converting the encoded file size from bits to bytes then dividing by the clip play time. Peak bitrates were determined by 'eyeballing' the statistics graph provided by the encoder. Encoding times were determined by subtracting each file's 'created' time stamp from its 'modified' time stamp (note possible system rounding).
2. One-frame offset between reference and test clips
3. Total bitrate set to 400 kbps to prevent frame dropping.
4. Total bitrate set to 1000 kbps to prevent frame dropping.

To ensure that the Dicas encoder didn't drop frames (believe me I tried many many many combinations of encoder options!), I had to do one of two things:

  1. Set the encoded bitrate significantly higher than the 300 kbps and 800 kbps targets, which would have made a comparison of the JNDmetrix results against other codecs meaningless (this was the only option available to me with the Apple Quicktime 6 Public Preview encoder, so thus far I haven't included that encoder in my study and similarly did not select this option for the Dicas encoder), or
  2. Enable the 'Very Smooth Motion' option for Image Quality/Motion Smoothness, versus 'Sharp Image' or the default 'Smooth Motion'.

Looking at the resultant files frame-by-frame, and at the JNDmetrix results, it's clear to me that in this mode and at these aggressive bitrates, the Dicas encoder is not necessarily compressing each and every frame of the source file but is instead sometimes repeating multiple copies of some source frames. For (hypothetical) example:

    Source file: 1-2-3-4-5-6-7-8-9-10

    Encoded file: 1-1-3-4-4-6-7-7-7-10

    JNDmetrix analysis result: good-bad-good-good-bad-good-bad-bad-bad-good

This pattern will be very clear to you when you look at the JNDmetrix report files, which give per-frame analysis results. Also, when single-stepping through the source and encoded files, I sometimes found a 1-to-1 match between frames, but sometimes there was a one-frame offset, within the same clip! As a result, I ran two sets of analyses; one with a 1-to-1 match between reference and test clips, and one with a one-frame offset (labeled alternate).

I commend Dicas on their development of a fully- and flexibly-optioned encoder that enabled me, compared to other codecs I tested, to come very close to the target bitrates. When I set it to 'Sharp Image' or 'Smooth Motion', it delivered very impressive quality, and I barely (if at all) noticed that the encoder had dropped frames. Even in the 'Very Smooth Motion' mode, I wasn't aware that frames had been discarded and other repeated in their stead, until I looked at the JNDmetrix report files.

Given this scenario, I better understand RealNetworks' reluctance to participate in the study. JNDmetrix is a useful tool, don't get me wrong. But its intolerance of dropped frames is incompatible both with the operation of modern video codecs at aggressive bitrate targets and with the interpolation capability of the human visual system. Folks who just look at the JNDmetrix numerical results, and don't take the time to also read the background information, would likely obtain an inaccurate (or at least incomplete) understanding of a codec's strengths and shortcomings. Sarnoff's planned future support for DirectShow decoders that implement seeking via time-stamping, thereby breaking its exclusive ties to frame-by-frame synchronization, may improve its capability as a technology-independent codec evaluation tool.

Test clips and corresponding batch and report files (mine)

Below you'll find the encoded video clips I've generated and have copyright permission to distribute (i.e. no Hannover clips, sorry!). Please DO NOT stream the files directly from the server. To make better use of non-infinite network bandwidth, right-click on the file links to download and save them to your computer's hard drive, then play them from there (see the Software and other useful links section of this addendum for player suggestions). The above results tables indicate file sizes.

Dicas MPEG-4 Advanced Simple Profile (300 kbps)

Batch and INI files Report files

Dicas MPEG-4 Advanced Simple Profile (800 kbps)

Batch and INI files Report files src1_ref__625.mp4 src2_ref__625.mp4
src3_ref__625.mp4 src4_ref__625.mp4 src5_ref__625.mp4 src6_ref__625.mp4
src7_ref__625.mp4 src8_ref__625.mp4 src9_ref__625.mp4 src10_ref__625.mp4
src13_ref__525.mp4 src14_ref__525.mp4 src15_ref__525.mp4 src16_ref__525.mp4
src17_ref__525.mp4 src18_ref__525.mp4 src19_ref__525.mp4 src20_ref__525.mp4
src21_ref__525.mp4 src22_ref__525.mp4    

Ligos MPEG-2 Main Level, Main Profile (800 kbps, VBR)

Batch and INI files Report files src1_ref__625.m2v src2_ref__625.m2v
src3_ref__625.m2v src4_ref__625.m2v src5_ref__625.m2v src6_ref__625.m2v
src7_ref__625.m2v src8_ref__625.m2v src9_ref__625.m2v src10_ref__625.m2v

Ligos MPEG-4 Simple Profile, Level 3 (300 kbps, CBR)

Batch and INI files Report files

Microsoft Windows Media Video (300 kbps, 1-pass CBR)

Batch and INI files Report files

Microsoft Windows Media Video (300 kbps, 2-pass CBR)

Batch and INI files Report files

Microsoft Windows Media Video (800 kbps, 1-pass VBR)

Batch and INI files Report files src1_ref__625.wmv src2_ref__625.wmv
src3_ref__625.wmv src4_ref__625.wmv src5_ref__625.wmv src6_ref__625.wmv
src7_ref__625.wmv src8_ref__625.wmv src9_ref__625.wmv src10_ref__625.wmv
src13_ref__525.wmv src14_ref__525.wmv  src15_ref__525.wmv src16_ref__525.wmv
src17_ref__525.wmv src18_ref__525.wmv src19_ref__525.wmv src20_ref__525.wmv
src21_ref__525.wmv src22_ref__525.wmv    

Microsoft Windows Media Video (800 kbps, 2-pass VBR)

Batch and INI files Report files src1_ref__625.wmv src2_ref__625.wmv
src3_ref__625.wmv src4_ref__625.wmv src5_ref__625.wmv src6_ref__625.wmv
src7_ref__625.wmv src8_ref__625.wmv src9_ref__625.wmv src10_ref__625.wmv
src13_ref__525.wmv src14_ref__525.wmv  src15_ref__525.wmv src16_ref__525.wmv
src17_ref__525.wmv src18_ref__525.wmv src19_ref__525.wmv src20_ref__525.wmv
src21_ref__525.wmv src22_ref__525.wmv    

Test clips (from others) and my results on those clips

As the vendors deliver to me their attempts at optimally compressing the reference clips, and as I subsequently run those test clips through JNDmetrix, you'll find the results here. Microsoft and On2 (for both the open-source VP3 and proprietary, more advanced VP5 codecs) have optimization projects underway, and Dicas's and Ligos's comments are below. The guidance I've given all of the vendors is:

You have the ability to tweak any publicly-documented setting in your encoder that you wish, as long as you DO NOT drop frames or alter frame resolution as a result (remember, JNDmetrix won't like that), and as long as you document your per-file settings for me. My suggestion is that your priorities should be:

  1. Come as close as possible to the target 300 kbps and 800 kbps bitrates. I was quite blunt, frankly, in my article commenting about my disappointment in some codecs' inability to easily (or at all) allow me to do this.
  2. Then maximize quality at those bitrates
  3. Then minimize encoding time at those bitrate/quality combos

On that last point; I normally determined this by logging the 'created' and 'modified' timestamps in the file properties. You're doubtlessly going to be running different hardware and operating system revs than I. I'd ask you to capture the system clock values like I did, both for your chosen encode settings and for mine (for comparison purposes).

One vendor who's decided not to invest in the optimization effort is Ligos. An abridged version of an email sent to me from Robert Saint John, Ligos' Technical Marketing Manager, is below:

We've evaluated your tests and found them to be on par with what we expected. Under these constraints, I'm informed, we're not going to get any better results at this time. I really can't commit to putting more time into this project, especially if I'm not going to be able to improve the results that you're getting. The best thing we can do right now is take the feedback from the results as well as from the process itself, and see if something can be done between Ligos and Sarnoff to make the process easier, and use that to make the codecs better if they need improvement.

Dicas took a look at my results, and has the following comments, from company representative Philipp Kraetzer and edited for grammar and clarity:

Apologies for my very late reply. It took us some time to download the files and also to examine the problem with frame dropping.

Alas the answer is not quite simple:

1. The source files seem to be converted from 25 fps (PAL) to 30 fps (NTSC) by simply doubling every 5th frame. Certainly, this is not really a problem but the video looks more jerky.

2. In order to keep the bitrate and the VBV constraints, there may sometimes be a frame drop. You can avoid this by setting the value of the buffer size to a higher value, e.g. 8 sec. This yields a less accurate bitrate for short video sequences but avoids the frame dropping.

3. All other settings you have chosen are OK

4. We noticed that QT Player 6 sometimes skips frame if it is not fast enough to decode them. I am not sure but this may be a problem also for your test. I have attached a simple (but useful) command line tool to decode MP4 files and write the video data to an uncompressed AVI file or to a raw data YUV 4:2:0 file. Maybe this can be helpful for you, too.

    Usage is: MP4Coder -decode <filename>.mp4 -o <outputfile> -[avi|raw] -[yuv|bgr|rgb|bgra|rgba] -pf [0|1|2|3]
    "MP4Coder -decode" prints a help message.

For the VQEG sequences:

Set the Key Frame period to 300, all other settings are ok, except in the following 2 sequences (to avoid too much frame skipping)

-------------------------------- Settings for src13_ref_525.avi

Key frame period: 300 Bitrate: 880 Buffer Size: 8 sec

-------------------------------- Settings for src17_ref_525.avi

Key frame period 300 Bitrate 800 Buffer Size 6 sec

-------------------------------- 

For the Hannover CIF sequences:

Set buffer size to 4 sec, all other settings as before, except for

-------------------------------- Settings for funfair_cif.avi:

Key frame period: 300 Bitrate: 320 Buffer Size: 8 sec Comp. Quality vs. Speed: Medium

-------------------------------- 

The encoding time for the optimized settings is nearly the same as for your original settings. To maximize encoding speed one should disable both previews (input/output).

If you have further questions or comments please contact me. Sorry again for my late response; there are a lot of different projects underway at the moments :-)

Best,

Philipp

Other video compression studies

eTesting Labs' study from last summer was subjective in the traditional sense; instead of employing JNDmetrix as I did, it relied on test subjects. It used a subset of this project's University of Hannover clips, albeit compressed to a more aggressive 250 kbps bitrate. Since the two studies employed the same reference clips, is there any correlation between their results? See for yourself, the Adobe Acrobat document is here.

Software and other useful links

Feature-, time- and/or clip length-limited evaluation versions of most of the products that follow can be downloaded from the vendors' websites. In many cases, you can also purchase a license online.

The most straightforward way to obtain a MPEG-2 decoder is to purchase DVD playback software from companies like Cyberlink, InterVideoNational Semiconductor (Mediamatics) and Sonic (who now maintains the former Ravisent Technologies product line). The final version of Apple's QuickTime Version 6 is also reputed to include MPEG-2 support, although it  isn't included in the Public Preview version now available. MPEG-2 encoders (usually with bundled decoders) come from companies like InterVideo (WinCoder), Ligos and MedioStream. Other MPEG-2 encoder options are TMPGEnc and the freeware AVI2MPG2 and bbMPEG. Sonic Foundry's Vegas Video includes a MPEG-2 encoder, as do CyberLink's PowerDirector and PowerVCR II, and InterVideo's WinDVR and WinProducer.

The latest version of Ligos's LSX-MPEG plugin for Adobe Premiere supports MPEG-4 encoding (Simple Profile only), and the bundled MPEG-4 decoder works fine within Windows Media Player. Dicas offers both consumer (X4) and professional (S4) versions of its MPEG-4 encoder (Simple, Advanced Simple and Core profiles), along with a SDK and an application that will embed MPEG-4 data streams within an AVI wrapper. The company also supplies standalone DirectShow filters and a free player. Apple's Quicktime 6 Public Preview, both an encoder and decoder, creates Simple and Advanced Simple MPEG-4 files, and can also embed MPEG-4 audio and video within the MOV wrapper. Similarly, DivXNetworks embeds MPEG-4-compatible data within either the industry-standard MP4 or proprietary DivX formats.

I successfully played back the MPEG-4 Simple and Advanced Simple Profile clips I created in three decoder programs; Apple's Quicktime 6 Public Preview, Dicas's mpegable Player  and the DivX Player. Other freely downloadable players, which I have not yet tried, come from companies such as Envivio (plugins for Quicktime, RealSystem, and if not now, soon, Windows Media Player), PacketVideo and Philips. Sigma Designs' website offers a freely downloadable MPEG-4 encoder, though if you read the fine print you'll discover that you're responsible for paying any license fees that may result from your use of it. See Ben Waggoner's coverage of MPEG-4 encoder-and-player compatibility in the June 2002 issue of DV Magazine.

What about Windows Media Video? For encoding purposes, you've got two options, both freely downloadable from the Microsoft website. The Windows Media Encoder 7.1 is GUI-based and will encode to Windows Media 8 audio and video formats, albeit without 2-pass and VBR support (which is also lacking in third-party programs that offer Windows Media encoding through Microsoft's SDK). To test all of the encoding options I did, you'll need the Windows Media Encoder 8 command line utility; search Google for GUIs that run on top of WME8, such as the Visual Basic program designed by Roy Lawson. Also freely downloadable from the Microsoft Windows Media site are players for Windows 9x/ ME/NT4/2K/XP/CE, Mac O/S 8.1 to X, and Sun Solaris. To transcode Windows Media Video to other formats, try Sonic Foundry's Vegas Video (which, by the time you read this, may have fixed the replicated-frames bugs I discovered); Adobe also reports that the next version of Premiere will include import support for Windows Media.

To get at the data hidden within the MPEG-2 file wrapper, such as average and peak bitrates, sequences and locations of I, P and B frames, and the like, at least two freeware utilities exist; bbTOOLS and Teco's Bitrate Viewer. A fuller-featured, albeit, not free variant called Parse MPEG is also available for download and purchase from the Teco website, and Interra's MProbe is an alternative. For MPEG-4, the only option I discovered at the present time is Interra's M4; it worked pretty well for me (although its Globetrotter content protection algorithm blocked it from running on one of my PCs even with a valid key), but it won't satisfy the fiscal needs of the extreme penny pinchers. And for AVIs, you can obtain rudimentary information through File -> Properties, but for more statistics (and a built-in viewer) search Google for the Terabits AVI Info (avinfo) utility.

I barely scratched the surface of the two full-featured, expensive video editing programs I used in this project; Adobe Premiere and Sonic Foundry Vegas Video. At $30, Apple's Quicktime Pro is a low-cost alternative which bears serious consideration, and if any amount of money is an issue for you, check out the freeware programs VirtualDub and MovieXone, the latter from AIST. Although I wouldn't necessarily recommend Microsoft's ancient VidEdit as your primary editing utility (the program hearkens back to the Windows 3.x days) it does make an excellent test of AVI compatibility; I found a copy here. And if you don't need to do editing per se, just batch-mode processing and transcoding to multiple formats, all of these programs are probably overkill. Instead, check out Canopus's ProCoder and Discreet's Cleaner.

How do you get your hands on a copy of Sarnoff's JNDmetrix? Doug Dixon admits that the product isn't yet ready for general distribution, and at $9,850 it's also pricey, but a 45-day evaluation version is available. Send Sarnoff an email for more information. Genista sells a video quality testing product called VideoQoS which also claims to factor in perceptual effects, but I don't know much about it as the company didn't respond to my reqeuests for information. If you'd like to explore the less accurate, but much less expensive, PSNR approach to image quality analysis, I've been told that imgcmp, part of the JasPer JPEG-2000 suite, works well. Teco's website indicates that they have a PSNR-based product called Frame Comparator under development.

Now for some miscellaneous utilities. To convert the VQEG files from YUV to AVI, you'll need two programs, VQEG2STD and then YUV2AVI, both from Stewart Worrall. If the YUV files you'll be working with are 4:2:0, and if you don't want to hassle with the larger file sizes and minor image degradation of component video-to-RGB transcoding in YUV2AVI (since compressors will subsequently transcode back to component video) or you want to batch-convert a group of YUV files, try Microsoft's YUVTOAVI. It's part of the company's MPEG-4 Video Reference Software toolkit; officially you need to get a license from the company to use it, but as with VidEdit it's available for download on the Internet. Search using keywords such as 'microsoft-fpdam1-1.0-000403' or (for the newer version) 'microsoft-fdam1-2.3-001213'; at the time I wrote this, you could find a copy of the microsoft-fpdam1-1.0-000403 toolkit here and the fdam1-2.3-001213 toolkit here.

ImageMagick is a full-featured set of image conversion, editing and compositing tools; the developer recently added support for 4:2:2 YUV in response to my request. I've been told that Adobe After Effects, like Discreet Cleaner, has robust video deinterlacing capabilities. If Windows Media Player can play a video file,  Avisynth (from Ben Rudiak-Gould, who also created the Huffyuv lossless video codec) will process it and let you open it in almost any video editing or converting utility. And if you'd like to analyze (and alter) the DirectShow filter mapping that occurs during video clip decoding, search Google for the Microsoft GraphEdit utility, from the company's Virtual C++ SDK.

Here are some websites that you might find useful in tracking down video information and utilities. Some I personally reference, some were recommended to me and to you readers, and others regularly appeared at the top of search results lists during my research:

Finally, I'd like to thank the following companies whose products enabled me to transfer this project's large files to the codec vendors, and enabled them to send their results back to me:

July 16, 2002

The just-released final version of Apple's QuickTime 6, unlike its Product Preview predecessor, will currently not play back some MPEG-4 Advanced Simple profile content such as the Dicas-encoded material I generated for this hands-on project. Alternatively, you can use Dicas's or DivX's players, although you can't transcode from MPEG-4 to AVI from them. Or you can find a copy of the Quicktime 6 Public Preview installer stub for Windows (which supposedly expires in October) here or the standalone installer (including the full installation download cache file) here QuickTime 6 supports a subset of MPEG-2 content via a separate $19.99 plug-in component, specifically program streams (which combine audio and video with a common timeline). It does not play either DSS-encrypted DVDs or MPEG-2 transport streams (with independent audio and video time bases).

July 25, 2002

See the MPEG4IP website for open-source MPEG-4 audio and video software, including encoders and a player.