The TS-419P II has a 2 GHz Marvell Feroceon "Kirkwood" CPU, which is an armv5tel architecture, according to "uname -m" - we have to keep this in mind when compiling some of the packages, since we will be tuning builds for this architecture and will have to disable platform-specific assembly optimizations for the most part. Now, onto the steps involved:
- Install "Optware IPKG" via the QNAP Qpkg centre, if you haven't already.
- Log into the NAS via ssh.
- Install the some packages required for building ffmpeg and its dependencies via ipkg, by typing:
ipkg update ipkg install gcc make pkgconfig libstdc++ git coreutils
- Ensure that /etc/ld.so.conf is set up so that /opt/lib is a location for shared libraries:
if ! grep -q /opt/lib /etc/ld.so.conf; then echo /opt/lib >> /etc/ld.so.conf; else echo no; fi
Alternatively, you can manually edit /etc/ld.so.conf and make sure it looks like this:/lib /usr/lib /usr/local/lib /opt/lib
- Install some codec libraries for ffmpeg via ipkg:
ipkg install lame faad2 libogg libtheora libvorbis libmatroska libmpeg2
- Next, create a directory in which you can download and compile some required packages:
mkdir /opt/build
- Build & install faac:
cd /opt/build/ wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz tar -xzvf faac-1.28.tar.gz cd faac-1.28/ CFLAGS="-march=armv5te -mtune=marvell-f -Wall -O2 -fstrength-reduce -finline-functions -ffast-math -fomit-frame-pointer" ./configure --prefix=/opt --enable-static=no make make install
- Build & install x264 (the version shipped by ipkg is too old for ffmpeg):
cd /opt/build/ git clone git://git.videolan.org/x264.git cd x264/ CFLAGS="-march=armv5te -Wall -O2 -fstrength-reduce -finline-functions -ffast-math -fomit-frame-pointer" ./configure --prefix=/opt --enable-shared --system-libx264 --disable-asm make make install
- Build & install xvidcore:
Note: the configure script for the latest xvidcore isn't compatible with the awk tool available on the QNAP NAS. The workaround is to download an earlier version of xvidcore as well and replace the current version's configure script with the older one; this is done in the example below:cd /opt/build/ wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz tar -xzvf xvidcore-1.3.2.tar.gz cd xvidcore/build/generic/ wget http://downloads.xvid.org/downloads/xvidcore-1.3.0.tar.gz tar -xzvf vidcore-1.3.0.tar.gz cp -v xvidcore/build/generic/configure . CFLAGS="-march=armv5te -mtune=marvell-f -Wall -O2 -fstrength-reduce -finline-functions -ffast-math -fomit-frame-pointer" ./configure --prefix=/opt make make install
- Finally, build & install ffmpeg:
cd /opt/build/ wget http://ffmpeg.org/releases/ffmpeg-1.2.tar.gz tar -xzvf ffmpeg-1.2.tar.gz cd ffmpeg-1.2/ CFLAGS="-march=armv5te -Wall -O2 -fstrength-reduce -finline-functions -ffast-math -fomit-frame-pointer" ./configure --prefix=/opt --enable-gpl --enable-nonfree --enable-bzlib --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --disable-asm --disable-debug make make install
- Run ldconfig to make sure all shared library additions are picked up:
ldconfig
If you would like to override the system's ffmpeg with your new custom version, simply edit your PATH and make sure /opt/bin comes before /usr/bin.
Hey i am trying to follow your step but receiving the following error message. Can you help. Thanks
ReplyDelete[/opt/build] # cd faac-1.28/
[/opt/build/faac-1.28] # CFLAGS="-march=armv5te -mtune=marvell-f -Wall -O2 -fstrength-reduce -finline-functions -ffast-math -fomit-frame-pointer" ./configure --prefix=/opt --enable-static=no
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name...
configure: error: C compiler cannot create executables
See `config.log' for more details.
I'll need to see the contents of your "config.log" file to be sure, but it looks like your build system (gcc, ld, etc) has been corrupted somehow.
DeleteI'd start by removing the gcc and libstdc++ packages that you installed with ipkg, restarting the machine, and reinstalling them:
ipkg remove gcc
ipkg remove libstdc++
ipkg remove pkgconfig
ipkg remove coreutils
...[reboot]...
ipkg install gcc libstdc++ pkgconfig coreutils
As I said though, we need a bit more information. Could you post the contents of your config.log file?
Also, during the above, please reinstall "binutils", i.e.:
Deleteipkg remove binutils
...[reboot]...
ipkg install binutils
http://speedy.sh/wEsTm/config.log
DeleteThanks for your prompt response. Before contacted you, i removed and installed gcc but that did not solve the problem. Please take a look at my config.log file and let me know when to proceed with the steps you provided above if necessary.
Thanks. Unfortunately it appears you are attempting to use this guide to compile libfaac on a different QNAP model - yours uses a x86_64 CPU architecture. This guide is specifically tuned to compile these packages on an ARM-based CPU (specifically the QNAP 419P II); the instructions here will not work on your QNAP model.
DeleteFor the most part, however, it should be simpler on your QNAP. Remove all of the "-march", "-mtune" options from CFLAGS and remove the "--disable-asm" switches from x264 and ffmpeg's configure statements, and it should be OK.
Thanks a lot for your help. I am still having issues. I followed your steps and re moved the -march and -mtune switches but i am receiving a different error message now.
Delete[/opt/build/faac-1.28] # CFLAGS="-Wall -O2 -fstrength-reduce -finline-functions -ffast-math -fomit-frame-pointer" ./configure --prefix=/opt --enable-static=no
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... configure: error: no accepta ble grep could be found in /bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local /sbin:/opt/bin:/opt/sbin:/usr/xpg4/bin
[/opt/build/faac-1.28] # make
make: *** No targets specified and no makefile found. Stop.
This comment has been removed by the author.
ReplyDeleteMy Turbostation TS-212 converts with 0.9 kbit/s
ReplyDeleteWhat am i doing wrong?
log:
[/share/MD0_DATA/Multimedia/Movies/Umrechnen] # ffmpeg -i Argo.mkv -r 30 -ab 3>
ffmpeg version 1.2 Copyright (c) 2000-2013 the FFmpeg developers
built on Jun 25 2013 19:55:19 with gcc 4.2.3 (GCC)
configuration: --prefix=/opt --enable-gpl --enable-nonfree --enable-bzlib --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --disable-asm --disable-debug
libavutil 52. 18.100 / 52. 18.100
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.104 / 54. 63.104
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 42.103 / 3. 42.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, matroska,webm, from 'Argo.mkv':
Metadata:
creation_time : 2013-03-09 15:34:08
Duration: 02:09:35.68, start: 0.000000, bitrate: 13514 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p, 1920x800, SAR 1:1 DAR 12:5, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0:1(ger): Audio: ac3, 48000 Hz, 5.1(side), fltp, 640 kb/s
Stream #0:2(ger): Subtitle: subrip (forced)
[libx264 @ 0xfa1ff0] using SAR=27/20
[libx264 @ 0xfa1ff0] using cpu capabilities: none!
[libx264 @ 0xfa1ff0] profile High, level 4.0
[libx264 @ 0xfa1ff0] 264 - core 133 r2334 a3ac64b - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=30 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'Argo.mp4':
Metadata:
encoder : Lavf54.63.104
Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 27:20 DAR 12:5], q=-1--1, 15360 tbn, 30 tbc
Stream #0:1(ger): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, 5.1, s16, 320 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libx264)
Stream #0:1 -> #0:1 (ac3 -> libfaac)
Press [q] to stop, [?] for help
frame= 11 fps=0.0 q=0.0 20000000000000000000000000000000size= 0kB time=00:00:00.41 bitrate= 0.9kbits/s dup=2 drop=0
A great tutorial, very helpful!! Thanks
ReplyDeleteDude, thank you so much for posting this!
ReplyDeleteGreat post! Only thing is that after a NAS reload the config of /etc/ld.so.conf is reset. Any idea to make it permament?
ReplyDeleteThanks so much, what a great step-through. Much appreciated.
ReplyDeleteUsed this guide today for compiling ffmpeg on my QNAP TS-870 Pro and it worked (mostly) -- had an issue compiling x264 as the x70 series is 64bit, so had to configure it using the following:
ReplyDeleteCFLAGS="-march=i486 -Wall -O2 -fstrength-reduce -finline-functions -ffast-math -fomit-frame-pointer" ./configure --prefix=/opt --enable-shared --system-libx264 --disable-asm --host=i686-linux
and also compiled using latest FFMPEG version available as of today (2.7.3), and it works beautifully!
You can create a script to run via crontab to define the ldconfig settings on startup, just add the following lines to it:
if ! grep -q /opt/lib /etc/ld.so.conf; then echo /opt/lib >> /etc/ld.so.conf; else echo no; fi
ldconfig
Thanks for the guide! :)
I think that there is a typo. On step #9, line:
ReplyDeletetar -xzvf vidcore-1.3.0.tar.gz
should be this instead:
tar -xzvf xvidcore-1.3.0.tar.gz
Thanks a bunch! Seems to have worked. :)
ReplyDelete