andy vt's tools & blog

automating lazy

This Blog


andy vt's blog

QSTranscode -

I just realized that I never released this rev. The change log is small, but there were some bigger changes to the internals to add non-MSDK supported video CODECs support.
- Check video codec profile for HW support
- Decode video codecs that are unsupported by MSDK with FFMPEG
- Explicit DX11 support

Published May 16 2013, 06:54 AM by babgvant
Filed under:



Pirppuli said:


I'm trying to get QSTranscode to work with MediaPortal's MPExtended Service and its configurable transcoding profiles ( I'm hoping to see better deinterlacing for live TV and lower CPU load when transcoding. However, so far I have not had success.


- Does QSTranscode support reading from and writing to pipes, as required by MPExtended?

- Does QSTranscode support DVB Transport Streams (live TV) as source?

- Can you add support for specifying a start position (in seconds) in the source file to enable seeking?



May 16, 2013 9:31 AM

babgvant said:

1) It uses FFMEG for reading/writing so maybe. Certainly not something I care to support though.

2) As long as data can be read it will keep going. That said, there is no read throttling (yet) so probably not.

3) Sort of. EDL files are supported, so it's possible to signal start/end positions.

May 16, 2013 10:06 AM

zjacobs said:


Was talking with you on twitter earlier today.  Thanks for releasing the new version!  I'm still having some difficulties when building the project though.

1)  Downloaded the project and put it in my Intel Media SDK directory.  I opened the solution (I am using VS 2012) and updated the project to VS2012.  I built the project to and aside from some warnings, it looks like the linker has trouble finding .dll files:

2)  Edited the generatelib.cmd file to work with VS2012 by changing the first line to "call "%VS110COMNTOOLS%vsvars32.bat" "

3)  Some errors happen, output seen here:

4)  I cleaned and rebuilt the solution in VS and now there are many more linking errors (which look like libs weren't formed correctly):



May 16, 2013 12:42 PM

babgvant said:

1) There's a post build action that copies the DLLs (the ones in the binary zip) from "\thirdparty\lib_win32\" to the target folder.

2) You don't need to do this since I included the libs

3 + 4) You may need to massage the lib folders to work with the folder structure you're using.

May 16, 2013 1:30 PM

zjacobs said:

Awesome!  Thanks for all of your help.  It ended up working.  This tool will be very helpful for me.

Not an issue for me but an FYI, I was also having this compile error bc of a UINT64_C type:

Adding this to common.h fixed it:

#ifndef INT64_C

#define INT64_C(c) (c ## LL)

#define UINT64_C(c) (c ## ULL)


Any chance you'll add support for multiple output streams?

May 17, 2013 5:35 AM

babgvant said:

Do you mean multiple audio streams?

May 17, 2013 7:00 AM

zjacobs said:

Sorry, I mean multiple output files (for audio and video streams).  FFmpeg allows you to transcode to output files with different options for each file in parallel but can't use QS hardware here:

ffmpeg -i -b:v 100k -c:v libx264 -c:a copy output1.mp4 -b:500k -c:v libx264 -c:a copy output2.mp4

The media SDK also has support for running several transcoding pipelines in parallel on the QS hardware but no support for containers.

The way I envision it, this would be a valid command:

qstranscode -i -o output_1.mp4 -hw -h264 -aac -b 500 -o output_2.mp4 -hw -h264 -aac -b 1000 -o output_3.mp4 -hw -h264 -aac -b 250

May 17, 2013 8:53 AM

babgvant said:

Why wouldn't you just run 2x instances of QSTranscode?

I don't see the value in taking on additional complexity when you can already accomplish the thing you want.

May 17, 2013 9:06 AM

zjacobs said:

My assumptions are that it would be faster to do it the way I suggested.  In the ffmpeg example, the input file is only decoded once instead of two separate times.  My example only lists two outputs so it seems trivial, but in reality I'm targeting many more outputs.

A little background for my assumptions:

May 17, 2013 11:23 AM

zjacobs said:

Not a big deal if you're not willing to add the complexity.  It was just something that I envisioned as being useful for me.

May 17, 2013 11:26 AM

babgvant said:

Yeah. it would save on I/O and decoding time/effort. In some cases I/O would be a valuable optimization but decode cost is already very low if the HW is fully utilized, plus it would be difficult to orchestrate.

Also, because it would involve a copy through system RAM (the surfaces reside in GPU memory) to duplicate the decoded frame it's not completely costless even ignoring the increase in complexity.

If you want to add it in and submit a patch, I'd certainly have a look at it. Just don't think it would be worth the time given the relatively niche value.

May 17, 2013 11:53 AM

Taddeusz said:

I know this may be a stupid question but can this be used at all without a Quick Sync capable system?

I ask because I want to try the "edit" feature. I have a graphical batch program that currently uses Handbrake to separately encode sections of video based on an edl file. It works fine but time is wasted because HB can't just take a series of cut points and encode around them. You have to give it start and stop points and then it scans the video till it reaches the specified start. For videos less than 30min it's not a huge issue but as the file gets longer time wasted scanning for each section of video gets longer.

If not QSTranscode is there another way to accomplish using an EDL file for cutpoints that doesn't include separately encoding each section of video?

May 22, 2013 7:38 AM

babgvant said:

Yes. It is for QS capable systems only.

I think ffmpeg or mencoder supports EDL files, but I'm not 100% on that.

May 22, 2013 8:01 AM
@2008 andy vt
Powered by Community Server (Non-Commercial Edition), by Telligent Systems