Video Transcoder on GPU
NVIDIA CUDA technology is a key for high performance imaging applications. It could be also applied to accelerate video transcoding solutions on GPU. We are developing highly optimized video transcoder software with GPU-accelerated video processing pipeline that significantly outperforms conventional CPU video processing pipelines in widely spread transcoding applications.
Video transcoder task should be solved to play video smoothly on different devices. That is why we need to convert source video to a new file with different quality, compression, format, resolution, bit depth, etc. Usually it's done on CPU with FFmpeg software which supports huge number of codecs, filters and formats. One more important solution is Quick Sync Video from Intel, which is a dedicated hardware core on the processor die. NVIDIA GPUs have hardware-based NVENC and NVDEC modules which are capable to encode and decode video with h.264 and h.265 algorithms and much more. Performance of that solution is much higher than realtime. Moreover, one can process several streams on just one GPU at the same time. Such a solution is now a part of FFmpeg package and it also includes resize and multiple output resolutions as well.
FFmpeg and NVENC/NVDEC are great, but they are unable to deal with MXF files which have internal JPEG2000 compression. Such an options does exist at FFmpeg to do J2K decoding with CPU-based OpenJPEG library, which is very slow. OpenJPEG is now multithreaded decoder, but it's still far from working in realtime even for 2K resolutions. You can try VLC or Windows Media Player to play MXF files on PC to see that they just can't do that smoothly. That's why we need to transcode source files from MXF format to MP4 with h264 compression.
Now we can do that on GPU by utilizing Fastvideo J2K decoder and NVIDIA NVENC encoder. As soon as NVENC can work in parallel with CUDA cores, we can do J2K decoding and h264 encoding at the same time. This is the way to improve total performance of transcoder.
GPU Transcoder Features
MXF transcoder pipeline for J2K sources
We have implemented that library as a part of our Image & Video Processing SDK. Our customers has opportunity to utilize GPU-accelerated SDK components to boost transcoder in their applications as a part of video processing pipeline.
Roadmap for Live GPU Transcoder
CPU vs GPU Video Encoding for H.264
We need to emphasize some important differences at H.264 encoding on GPU and CPU. This is frequently used scenario for transcoder solutions when initial and final streams are compressed according to H264 algorithm. GPU-based video encoding is usually optimized for high bitrate streaming rather than for playback. That's why GPU encoding is usually done without B-Frames with constant bitrate. CPU-based x264 solution is mostly intended for playback and storage.