-
-
Save drouarb/fb082c521d46aa43fdbb8cdc3d61ffbc to your computer and use it in GitHub Desktop.
#Install deps | |
apt install libgcrypt-dev libgpg-error-dev gnutls-dev libass-dev libopus-dev librtmp-dev libvorbis-dev libzvbi-dev libx264-dev yasm | |
#Download source | |
http://files.plexapp.com/sources/ffmpeg-2017-08.txz | |
#Extract & Configure | |
./configure --prefix=/root/build/ffmpeg/build/ --disable-bzlib --disable-ffplay --disable-ffserver --disable-ffprobe --disable-avdevice --disable-schannel --disable-vda --disable-doc --pkg-config-flags=--static --enable-muxers --enable-gpl --enable-version3 --enable-gnutls --disable-hwaccels --enable-libass --enable-librtmp --disable-devices --disable-lzma --disable-iconv --disable-protocol=concat --enable-libvorbis --enable-libopus --external-decoder=h264 --disable-bsfs --enable-bsf='aac_adtstoasc,extract_extradata,dca_core,h264_mp4toannexb,hevc_mp4toannexb,vp9_superframe,vp9_superframe_split,framedrop' --enable-decoder=png --enable-decoder=apng --enable-decoder=bmp --enable-decoder=mjpeg --enable-decoder=thp --enable-decoder=gif --enable-decoder=dirac --enable-decoder=ffv1 --enable-decoder=ffvhuff --enable-decoder=huffyuv --enable-decoder=rawvideo --enable-decoder=zero12v --enable-decoder=ayuv --enable-decoder=r210 --enable-decoder=v210 --enable-decoder=v210x --enable-decoder=v308 --enable-decoder=v408 --enable-decoder=v410 --enable-decoder=y41p --enable-decoder=yuv4 --enable-decoder=ansi --enable-decoder=alac --enable-decoder=flac --enable-decoder=vorbis --enable-decoder=opus --enable-decoder=pcm_f32be --enable-decoder=pcm_f32le --enable-decoder=pcm_f64be --enable-decoder=pcm_f64le --enable-decoder=pcm_lxf --enable-decoder=pcm_s16be --enable-decoder=pcm_s16be_planar --enable-decoder=pcm_s16le --enable-decoder=pcm_s16le_planar --enable-decoder=pcm_s24be --enable-decoder=pcm_s24le --enable-decoder=pcm_s24le_planar --enable-decoder=pcm_s32be --enable-decoder=pcm_s32le --enable-decoder=pcm_s32le_planar --enable-decoder=pcm_s8 --enable-decoder=pcm_s8_planar --enable-decoder=pcm_u16be --enable-decoder=pcm_u16le --enable-decoder=pcm_u24be --enable-decoder=pcm_u24le --enable-decoder=pcm_u32be --enable-decoder=pcm_u32le --enable-decoder=pcm_u8 --enable-decoder=pcm_alaw --enable-decoder=pcm_mulaw --enable-decoder=ass --enable-decoder=dvbsub --enable-decoder=dvdsub --enable-decoder=ccaption --enable-decoder=pgssub --enable-decoder=jacosub --enable-decoder=microdvd --enable-decoder=movtext --enable-decoder=mpl2 --enable-decoder=pjs --enable-decoder=realtext --enable-decoder=sami --enable-decoder=ssa --enable-decoder=stl --enable-decoder=subrip --enable-decoder=subviewer --enable-decoder=text --enable-decoder=vplayer --enable-decoder=webvtt --enable-decoder=xsub --enable-decoder=libzvbi_teletext --enable-decoder=eac3_eae --enable-decoder=truehd_eae --enable-decoder=mlp_eae --enable-encoder=flac --enable-encoder=alac --enable-encoder=libvorbis --enable-encoder=libopus --enable-encoder=mjpeg --enable-encoder=wrapped_avframe --enable-encoder=ass --enable-encoder=dvbsub --enable-encoder=dvdsub --enable-encoder=movtext --enable-encoder=ssa --enable-encoder=subrip --enable-encoder=text --enable-encoder=webvtt --enable-encoder=xsub --enable-encoder=pcm_f32be --enable-encoder=pcm_f32le --enable-encoder=pcm_f64be --enable-encoder=pcm_f64le --enable-encoder=pcm_s8 --enable-encoder=pcm_s8_planar --enable-encoder=pcm_s16be --enable-encoder=pcm_s16be_planar --enable-encoder=pcm_s16le --enable-encoder=pcm_s16le_planar --enable-encoder=pcm_s24be --enable-encoder=pcm_s24le --enable-encoder=pcm_s24le_planar --enable-encoder=pcm_s32be --enable-encoder=pcm_s32le --enable-encoder=pcm_s32le_planar --enable-encoder=pcm_u8 --enable-encoder=pcm_u16be --enable-encoder=pcm_u16le --enable-encoder=pcm_u24be --enable-encoder=pcm_u24le --enable-encoder=pcm_u32be --enable-encoder=pcm_u32le --enable-encoder=eac3_eae --enable-libzvbi --extra-libs='-lgcrypt -lgpg-error -ldl' --enable-pic --external-decoder=aac --external-encoder=aac --external-decoder=ac3 --external-encoder=ac3 --external-decoder=dca --external-decoder=flv --external-decoder=hevc --external-encoder=libx264 --external-decoder=mp2 --external-decoder=mp3 --external-decoder=mpeg2video --external-decoder=mpeg4 --external-decoder=msmpeg4v3 --external-decoder=rv40 --external-decoder=vc1 --external-decoder=wmav2 --external-decoder=wmv2 --enable-libx264 --enable-shared --disable-hwaccels | |
#Compile | |
make -j 8 | |
#Cp | |
cp `find -name '*.so*' | grep -P '(encoder|decoder)'` /root/unicorn/UnicornTranscoder/Codecs | |
cp `find -name '*.so*' | grep -Pv '(encoder|decoder)'` /root/unicorn/UnicornTranscoder/Resources | |
cp `find -name 'ffmpeg'` /root/unicorn/UnicornTranscoder/Resources/Plex\ Transcoder |
Plex uses a modified version of FFMPEG, it includes a callback URL to notify Plex of the progression of the conversion and the speed of it. It also includes a codec for EasyAudioEncoder which is a software allowing them to transcode proprietary audio codecs. Plex distributes only a version compiled for ARMv7 and amd64, I wanted to try to compile it for ARMv8 but the implementation of libx264 for ARM is really poor so the transcode is slow.
This is the last version that appears in the license file of my Plex Media Server package (Plexpass account version):
$ cat usr/lib/plexmediaserver/Resources/LICENSE | grep -i ffmpeg
Plex Transcoder contains code from ffmpeg: http://downloads.plex.tv/ffmpeg-source/ffmpeg-2018-03-22.tar.gz
Plex Media Scanner and Plex Media Server contain code from ffmpeg: http://downloads.plex.tv/ffmpeg-source/ffmpeg-2018-03-22.tar.gz
Probably it's too old and the LICENSE file is not updated, as this is the version I have installed locally:
$ LD_LIBRARY_PATH=. ./Plex\ Transcoder -version
ffmpeg version git-2018-06-20-e944d3a Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 4.8.2 (GCC)
configuration: --libdir=/data/jenkins/pms-deps-universal-v2/BUILD_TAG/linux-ubuntu-x86_64/output/pms-depends-linux-ubuntu-x86_64-release-ec83f26/lib --prefix=/data/jenkins/pms-deps-universal-v2/BUILD_TAG/linux-ubuntu-x86_64/output/pms-depends-linux-ubuntu-x86_64-release-ec83f26 --disable-bzlib --disable-ffplay --disable-ffprobe --disable-avdevice --disable-schannel --disable-linux-perf --disable-mediacodec --disable-debug --disable-doc --disable-shared --pkg-config-flags=--static --enable-muxers --enable-gpl --enable-version3 --enable-gnutls --enable-eae --disable-encoders --disable-decoders --disable-hwaccels --enable-libass --enable-librtmp --disable-devices --disable-lzma --disable-iconv --disable-protocol=concat --enable-libvorbis --enable-libopus --external-decoder=h264 --disable-bsfs --enable-bsf='aac_adtstoasc,extract_extradata,dca_core,h264_mp4toannexb,hevc_mp4toannexb,vp9_superframe,vp9_superframe_split,framedrop' --enable-decoder=png --enable-decoder=apng --enable-decoder=bmp --enable-decoder=mjpeg --enable-decoder=thp --enable-decoder=gif --enable-decoder=dirac --enable-decoder=ffv1 --enable-decoder=ffvhuff --enable-decoder=huffyuv --enable-decoder=rawvideo --enable-decoder=zero12v --enable-decoder=ayuv --enable-decoder=r210 --enable-decoder=v210 --enable-decoder=v210x --enable-decoder=v308 --enable-decoder=v408 --enable-decoder=v410 --enable-decoder=y41p --enable-decoder=yuv4 --enable-decoder=ansi --enable-decoder=alac --enable-decoder=flac --enable-decoder=vorbis --enable-decoder=opus --enable-decoder=pcm_f32be --enable-decoder=pcm_f32le --enable-decoder=pcm_f64be --enable-decoder=pcm_f64le --enable-decoder=pcm_lxf --enable-decoder=pcm_s16be --enable-decoder=pcm_s16be_planar --enable-decoder=pcm_s16le --enable-decoder=pcm_s16le_planar --enable-decoder=pcm_s24be --enable-decoder=pcm_s24le --enable-decoder=pcm_s24le_planar --enable-decoder=pcm_s32be --enable-decoder=pcm_s32le --enable-decoder=pcm_s32le_planar --enable-decoder=pcm_s8 --enable-decoder=pcm_s8_planar --enable-decoder=pcm_u16be --enable-decoder=pcm_u16le --enable-decoder=pcm_u24be --enable-decoder=pcm_u24le --enable-decoder=pcm_u32be --enable-decoder=pcm_u32le --enable-decoder=pcm_u8 --enable-decoder=pcm_alaw --enable-decoder=pcm_mulaw --enable-decoder=ass --enable-decoder=dvbsub --enable-decoder=dvdsub --enable-decoder=ccaption --enable-decoder=pgssub --enable-decoder=jacosub --enable-decoder=microdvd --enable-decoder=movtext --enable-decoder=mpl2 --enable-decoder=pjs --enable-decoder=realtext --enable-decoder=sami --enable-decoder=ssa --enable-decoder=stl --enable-decoder=subrip --enable-decoder=subviewer --enable-decoder=text --enable-decoder=vplayer --enable-decoder=webvtt --enable-decoder=xsub --enable-decoder=libzvbi_teletext --enable-decoder=eac3_eae --enable-decoder=truehd_eae --enable-decoder=mlp_eae --enable-encoder=flac --enable-encoder=alac --enable-encoder=libvorbis --enable-encoder=libopus --enable-encoder=mjpeg --enable-encoder=wrapped_avframe --enable-encoder=ass --enable-encoder=dvbsub --enable-encoder=dvdsub --enable-encoder=movtext --enable-encoder=ssa --enable-encoder=subrip --enable-encoder=text --enable-encoder=webvtt --enable-encoder=xsub --enable-encoder=pcm_f32be --enable-encoder=pcm_f32le --enable-encoder=pcm_f64be --enable-encoder=pcm_f64le --enable-encoder=pcm_s8 --enable-encoder=pcm_s8_planar --enable-encoder=pcm_s16be --enable-encoder=pcm_s16be_planar --enable-encoder=pcm_s16le --enable-encoder=pcm_s16le_planar --enable-encoder=pcm_s24be --enable-encoder=pcm_s24le --enable-encoder=pcm_s24le_planar --enable-encoder=pcm_s32be --enable-encoder=pcm_s32le --enable-encoder=pcm_s32le_planar --enable-encoder=pcm_u8 --enable-encoder=pcm_u16be --enable-encoder=pcm_u16le --enable-encoder=pcm_u24be --enable-encoder=pcm_u24le --enable-encoder=pcm_u32be --enable-encoder=pcm_u32le --enable-encoder=h264_vaapi --enable-encoder=hevc_vaapi --enable-encoder=h264_nvenc --enable-encoder=eac3_eae --arch=x86_64 --enable-libzvbi --cc='ccache gcc' --extra-ldflags=-L/data/jenkins/pms-deps-universal-v2/BUILD_TAG/linux-ubuntu-x86_64/output/pms-depends-linux-ubuntu-x86_64-release-ec83f26/lib --extra-libs='-lgcrypt -lgpg-error -ldl'
libavutil 56. 7.101 / 56. 7.101
libavcodec 58. 12.102 / 58. 12.102
libavformat 58. 9.100 / 58. 9.100
libavfilter 7. 12.100 / 7. 12.100
libswscale 5. 0.101 / 5. 0.101
libswresample 3. 0.101 / 3. 0.101
libpostproc 55. 0.100 / 55. 0.100
It's a master branch snapshot post 4.0.1 release.
Also, these are the only options I can't find in an upstream 4.0.1 configure script:
--enable-bsf='framedrop'
--enable-decoder=eac3_eae
--enable-decoder=mlp_eae
--enable-decoder=truehd_eae
--enable-eae
--enable-encoder=eac3_eae
--enable-muxers
--external-decoder=h264
Here is a way to get the list of external decoders https://gist.github.com/drouarb/9e84ebd0937ca9a026c1a587ca79dc42
Followed your solution to build the plex transcoder for a rpi4, but got stuck on making.
For anyone who follows this and gets the error when compiling:
"collect2: error: ld returned 1 exit status
ERROR: gnutls not found using pkg-config"
You need to also install libunistring-dev . For me worked and compiled successfully, but got hundred of errors like bellow. Any idea? Running Raspbian OS on rpi4. TIA
gcc: error: intrax8.o: No such file or directory
gcc: error: intrax8dsp.o: No such file or directory
gcc: error: msmpeg4data.o: No such file or directory
gcc: error: arm/vc1dsp_init_neon.o: No such file or directory
gcc: error: arm/vc1dsp_neon.o: No such file or directory
gcc: error: vc1dsp.o: No such file or directory
gcc: error: arm/vc1dsp_init_arm.o: No such file or directory
gcc: error: intrax8.o: No such file or directory
gcc: error: intrax8dsp.o: No such file or directory
gcc: error: msmpeg4data.o: No such file or directory
gcc: error: arm/vc1dsp_init_neon.o: No such file or directory
gcc: error: arm/vc1dsp_neon.o: No such file or directory
gcc: error: vc1dsp.o: No such file or directory
gcc: error: arm/vc1dsp_init_arm.o: No such file or directory
Out of curiosity, why bother with Plex's instead of using upstream ffmpeg? Is there something valuable in it?