Blue_MiSfit
2nd July 2010, 12:34
[EDIT] This was all updated quite a bit. The interesting graph I came up with a few hours later has been added to this OP just to grab eyes :)
Consider my thoughts in this OP somewhat misguided...
tl;dr - ffmpeg-mt is faster (for these sources anyway) than CoreAVC or DivX H.264!
http://imgur.com/8PJRS.png
Hey folks,
So we all know that CoreAVC is a great place to start if you're looking for FAST H.264 decoding on Windows. That's all well and good.
However, I recently realized I'd made the assumption that it would be very fast in all scenarios. As my numbers below show, this is not the case!
All tests were performed on a 2.4 GHz Intel Q6600 quad-core CPU running Windows 7 x64. Benchmarks were made using avs2avi. DSS2 provided DirectShow interaction. All sources were of identical content, and were 1080p24.
Source 1 - ~50mbps x264 encode, "fastdecode" tune (no CABAC, B-Frames, or Deblocking)
CoreAVC - 103.7 fps
FFMS2 - 31.5 fps
Fake CoreAVC "single threaded" ~ 25.93 fps
Source 2 - ~50mbps x264 encode, no CABAC or B-Frames, but has deblocking
CoreAVC - 86.9 fps
FFMS2 - 27.6 fps
Fake CoreAVC "single threaded" ~ 21.73 fps
Source 3 - ~50mbps x264 encode, with CABAC, B-frames, and deblocking
CoreAVC - 56.6 fps
FFMS2 - 13.7 fps
Fake CoreAVC "single threaded" ~ 14.2 fps
My conclusion? In typical scenarios for this community, CoreAVC or similar high performance multi-threaded decoders are the way to go.
However, in MY CASE :D, things are a little different. I usually work with H.264 sources that have no B-Frames, and use CAVLC instead of CABAC. Both of these sacrifices are made to facilitate real-time capture, which is a huge ugly animal all on its own!
Given my typical sources, and the fact that I'm doing a LOT of transcoding at once (anywhere from 3-6 1080p encodes on a system at once, depending on how many cores I have), FFMS2, single threaded, seems like it will actually give me better throughput - provided it never bottlenecks x264!
Sure, the numbers are always higher with CoreAVC, but the numbers are always with it eating up almost 100% of my CPU! That's fine for playback, but for high volume transcoding, I want the most efficient decoder for my type of files, correct?
I THINK I'm seeing this correctly. What do you guys think?
The best possible solution is to do all the decoding on a couple GPUs, but that's another story.
Derek
Consider my thoughts in this OP somewhat misguided...
tl;dr - ffmpeg-mt is faster (for these sources anyway) than CoreAVC or DivX H.264!
http://imgur.com/8PJRS.png
Hey folks,
So we all know that CoreAVC is a great place to start if you're looking for FAST H.264 decoding on Windows. That's all well and good.
However, I recently realized I'd made the assumption that it would be very fast in all scenarios. As my numbers below show, this is not the case!
All tests were performed on a 2.4 GHz Intel Q6600 quad-core CPU running Windows 7 x64. Benchmarks were made using avs2avi. DSS2 provided DirectShow interaction. All sources were of identical content, and were 1080p24.
Source 1 - ~50mbps x264 encode, "fastdecode" tune (no CABAC, B-Frames, or Deblocking)
CoreAVC - 103.7 fps
FFMS2 - 31.5 fps
Fake CoreAVC "single threaded" ~ 25.93 fps
Source 2 - ~50mbps x264 encode, no CABAC or B-Frames, but has deblocking
CoreAVC - 86.9 fps
FFMS2 - 27.6 fps
Fake CoreAVC "single threaded" ~ 21.73 fps
Source 3 - ~50mbps x264 encode, with CABAC, B-frames, and deblocking
CoreAVC - 56.6 fps
FFMS2 - 13.7 fps
Fake CoreAVC "single threaded" ~ 14.2 fps
My conclusion? In typical scenarios for this community, CoreAVC or similar high performance multi-threaded decoders are the way to go.
However, in MY CASE :D, things are a little different. I usually work with H.264 sources that have no B-Frames, and use CAVLC instead of CABAC. Both of these sacrifices are made to facilitate real-time capture, which is a huge ugly animal all on its own!
Given my typical sources, and the fact that I'm doing a LOT of transcoding at once (anywhere from 3-6 1080p encodes on a system at once, depending on how many cores I have), FFMS2, single threaded, seems like it will actually give me better throughput - provided it never bottlenecks x264!
Sure, the numbers are always higher with CoreAVC, but the numbers are always with it eating up almost 100% of my CPU! That's fine for playback, but for high volume transcoding, I want the most efficient decoder for my type of files, correct?
I THINK I'm seeing this correctly. What do you guys think?
The best possible solution is to do all the decoding on a couple GPUs, but that's another story.
Derek