OK, I've now done an objective comparison where I used JDownloader 2 to get the 1080p Gangnam Style video and converted it at three different 576p resolutions, using Xvid, H.264 Baseline, H.264 Main and H.264 High (12 files in total). All with the same MP3 audio (to reduce CPU usage compared to AAC). I have 'Skip Deblocking Filter' set to 'On' (as this does make a difference).
I tested on a Wii U in normal Wii mode (not overclocked). The Wii is set to output at 480p. On a Wii U this app will automatically switch to 576p if you select that setting and my TV reports the Wii U outputting 720x576.
The results:
- All Xvid files work flawlessly.
- All H.264 High Profile files drop frames. The higher the underlying resolution, the more horrible the frame drops, despite MP3 being used for the audio.
- 1024x576 for both Baseline and Main drop frames. Less bad but not good.
- 960x576 for Baseline didn't seem to have any dropped frames, however, Main does have dropped frames at 960x576 at a level of being horrible.
- At 720x576 Main Profile crosses the performance threshold of dropping few frames. Baseline is fine at 720x576.
- Xvid produces better image quality than Baseline, however, the file sizes are about double Baseline.
- The best compromise on file size versus quality is 720x576 Main Profile. About 40% of the file size of Xvid, less than Baseline.
The upshot is if you're not bothered about file sizes, go with Xvid. 720x576 Main Profile is likely to be useful for most purposes.
If you're new to ffmpeg, one of the advantages of it is if you have loads of files to convert you can create a batch file to bulk convert.
EDIT 1: Have discovered some input files need bit depth set to 8 bits which is achieved using the additional parameter -pix_fmt yuv420p
ffmpeg -i input.mkv -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v main -crf 24 -vf scale=720:576 -pix_fmt yuv420p output.mp4
For a typical movie, this will be about 300Mb per hour.
EDIT 2: Did more fine grained testing on what's the best video quality possible for Main Profile 720x576 without dropping frames. Frames start to drop at -crf 22. The optimal video setting is either -crf 24 or -crf 23. It's possible to improve audio quality with -qscale:a 2 without dropping frames. This will be quite good audio for the vast majority of TV / movie content. Again, think about the hardware constraints here in 'Budget Windows 98 PC from 1999' terms.
EDIT 3: I had a go at doing a very long movie at 576p on Main Profile. This app seems to have a scalability point where beyond a certain file size (somewhere over 1GB) or a movie length (over 3 hours) the app becomes non-responsive.
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libxvid -qscale:v 4 -vf scale=1024:576 GGS-Xvid-MP3-1024.avi
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libxvid -qscale:v 4 -vf scale=960:576 GGS-Xvid-MP3-960.avi
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libxvid -qscale:v 4 -vf scale=720:576 GGS-Xvid-MP3-720.avi
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v baseline -crf 24 -vf scale=1024:576 GGS-Baseline-MP3-1024.mp4
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v baseline -crf 24 -vf scale=960:576 GGS-Baseline-MP3-960.mp4
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v baseline -crf 24 -vf scale=720:576 GGS-Baseline-MP3-720.mp4
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v main -crf 24 -vf scale=1024:576 GGS-Main-MP3-1024.mp4
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v main -crf 24 -vf scale=960:576 GGS-Main-MP3-960.mp4
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v main -crf 24 -vf scale=720:576 GGS-Main-MP3-720.mp4
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v high -crf 18 -vf scale=1024:576 GGS-High-MP3-1024.mp4
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v high -crf 18 -vf scale=960:576 GGS-High-MP3-960.mp4
c:\ffmpeg\bin\ffmpeg.exe -i GGS.mp4 -acodec libmp3lame -qscale:a 4 -vcodec libx264 -profile:v high -crf 18 -vf scale=720:576 GGS-High-MP3-720.mp4