gputranscoder is an application that utilizes the Rasperry Pi GPU for transcoding transport stream media files.
gputranscoder needs an input_filename and output_filename to operate at minimum.
Important!!!: Make sure your output filename ends with a “ts” extension. The output container is guessed by the filename.
Extra config arguments are optional. Default values are 2Mbit for bitrate, false for deinterlacing , info for log level and size is copied from the input stream.
Basic usage is printed by the app itself as follows
Usage:
./gputranscoder [-s WxH] [-b target_bitrate] [-d] [-L log_level] <infile> <outfile>
-s size Resize output. 'size' format is WidthxHeight
-b bitrate Target bitrate in bits/second. Low bitrates may result in frame drops
-f framerate Frame Rate Per Second : fps
-g gopsize Sets the intra refresh period : GoP size. H264 video uses a complete frame (I-frame) every intra refresh period
This option specifies the numbers of frames between each I-frame.
-d Deinterlace
-p AVC profile string. Possible values: "main" "baseline" "extended" "high"
-L Debug Level: 1:error 2:warn 3:info 4:debug-
-q Initial Quanitization Level. Initial video quality at the beginning of encoding. Generally a value between 10 and 40.
Lower Value = Better Initial Quality
-P Comma seperated Blocked PID list. i.e. -P 257,278
After PID filtering, there must be still be a video stream for transcoder to operate.
Output container is guessed based on outfile name. Use '.ts' for transport stream output.
Input file must contain one of MPEG 2 or H.264 video.
Make sure You have installed necessary codecs in your RasPi
Sample usage:
# Sample usage for 3Mbit/sec target bitrate and Log Level only printing error messages.
gputranscoder -b 3000000 -L 1 input.ts output.ts
# Sample usage for main profile with framerate 30 fps
gputranscoder -p "main" -f 30 input.ts output.ts
# Sample usage for filtering audio stream with PID 257 and text stream with PID 278
gputranscoder -P 257,258 input.ts output.ts
Note that size and deinterlacing options are not enabled in the first binary
There are three major chunk of dependencies 1. OpenMAX api related dependencies. If these are not installed yet, you must build them on the Raspberry Pi under /opt/ folder
libGLESv2.so => /opt/vc/lib/libGLESv2.so (0x76378000)
libEGL.so => /opt/vc/lib/libEGL.so (0x7634f000)
libopenmaxil.so => /opt/vc/lib/libopenmaxil.so (0x76340000)
libbcm_host.so => /opt/vc/lib/libbcm_host.so (0x76322000)
libvcos.so => /opt/vc/lib/libvcos.so (0x76310000)
libvchiq_arm.so => /opt/vc/lib/libvchiq_arm.so (0x76302000)
2. FFmpeg related dependencies. For demuxing main lib is libavformat which depends on libavcodec which in turn brings in many dependencies. Although none of the soft codecs here are needed, the default ffmpeg on RasPi repository has them enabled so they will all be listed as a dependency.
If you do not have ffmpeg installed you must install it. sudo apt-get install ffmpeg. For future development, you will also need the development versions of libavutil libavformat and libavcodec
/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0x76fc9000)
libavformat.so.54 => /usr/lib/arm-linux-gnueabihf/neon/vfp/libavformat.so.54 (0x76ec3000)
libavcodec.so.54 => /usr/lib/arm-linux-gnueabihf/neon/vfp/libavcodec.so.54 (0x763be000)
libavutil.so.52 => /usr/lib/arm-linux-gnueabihf/neon/vfp/libavutil.so.52 (0x76395000)
librtmp.so.0 => /usr/lib/arm-linux-gnueabihf/librtmp.so.0 (0x76113000)
libxvidcore.so.4 => /usr/lib/arm-linux-gnueabihf/libxvidcore.so.4 (0x75ee9000)
libx264.so.130 => /usr/lib/arm-linux-gnueabihf/neon/vfp/libx264.so.130 (0x75d85000)
libvpx.so.1 => /usr/lib/arm-linux-gnueabihf/libvpx.so.1 (0x75d2b000)
libvorbisenc.so.2 => /usr/lib/arm-linux-gnueabihf/libvorbisenc.so.2 (0x75bbd000)
libvorbis.so.0 => /usr/lib/arm-linux-gnueabihf/libvorbis.so.0 (0x75b8d000)
libvo-amrwbenc.so.0 => /usr/lib/arm-linux-gnueabihf/libvo-amrwbenc.so.0 (0x75b6d000)
libvo-aacenc.so.0 => /usr/lib/arm-linux-gnueabihf/libvo-aacenc.so.0 (0x75b4a000)
libtheoraenc.so.1 => /usr/lib/arm-linux-gnueabihf/libtheoraenc.so.1 (0x75b09000)
libtheoradec.so.1 => /usr/lib/arm-linux-gnueabihf/libtheoradec.so.1 (0x75aea000)
libspeex.so.1 => /usr/lib/arm-linux-gnueabihf/libspeex.so.1 (0x75acc000)
libschroedinger-1.0.so.0 => /usr/lib/arm-linux-gnueabihf/libschroedinger-1.0.so.0 (0x75a14000)
libopus.so.0 => /usr/lib/libopus.so.0 (0x759d0000)
libopenjpeg.so.2 => /usr/lib/arm-linux-gnueabihf/libopenjpeg.so.2 (0x759ae000)
libopencore-amrwb.so.0 => /usr/lib/arm-linux-gnueabihf/libopencore-amrwb.so.0 (0x75994000)
libopencore-amrnb.so.0 => /usr/lib/arm-linux-gnueabihf/libopencore-amrnb.so.0 (0x75969000)
libmp3lame.so.0 => /usr/lib/arm-linux-gnueabihf/libmp3lame.so.0 (0x758ec000)
libgsm.so.1 => /usr/lib/arm-linux-gnueabihf/libgsm.so.1 (0x758da000)
libva.so.1 => /usr/lib/arm-linux-gnueabihf/libva.so.1 (0x758be000)
libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x758b2000)
libgcrypt.so.11 => /lib/arm-linux-gnueabihf/libgcrypt.so.11 (0x75832000)
libtasn1.so.3 => /usr/lib/arm-linux-gnueabihf/libtasn1.so.3 (0x7581c000)
libp11-kit.so.0 => /usr/lib/arm-linux-gnueabihf/libp11-kit.so.0 (0x75805000)
libogg.so.0 => /usr/lib/arm-linux-gnueabihf/libogg.so.0 (0x757f8000)
liborc-0.4.so.0 => /usr/lib/arm-linux-gnueabihf/liborc-0.4.so.0 (0x7577d000)
libgpg-error.so.0 => /lib/arm-linux-gnueabihf/libgpg-error.so.0 (0x75772000)
3. Arm libc and generic libraries only listed as information
libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0x760f5000)
libgnutls.so.26 => /usr/lib/arm-linux-gnueabihf/libgnutls.so.26 (0x7603b000)
libbz2.so.1.0 => /lib/arm-linux-gnueabihf/libbz2.so.1.0 (0x76021000)
libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0x75ff9000)
/lib/ld-linux-armhf.so.3 (0x76fd6000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x762e3000)
librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x762d3000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76262000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76131000)
H.264 is installed by default. Make sure you have purchased and installed MPEG-2 license from the Raspberry Pi store. [http://www.raspberrypi.com/license-keys/]
Known Issues
Version 1.0:
-b target_bitrate option-L loglevel option Version 1.1:
Version 1.2:
Version 1.3:
Version 1.4:
Version 1.5:
Version 1.6: