mad goal: port avconv to javascript (part 1 of 2)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
first install x264, libvpx and avconv the normal way without emscripten: | |
0. install common dependencies | |
> sudo apt-get install build-essential checkinstall build-dep | |
1. install yasm | |
> cd [YOUR PROJECTS FOLDER] | |
> wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz | |
> tar xzvf yasm-1.2.0.tar.gz | |
> cd yasm-1.2.0 | |
> sudo ./configure | |
> sudo make | |
> sudo make install | |
> yasm --version | |
shows something like | |
> yasm 1.2.0 | |
2. install x264 | |
> cd [YOUR PROJECTS FOLDER] | |
> git clone git://git.videolan.org/x264 x264 // or git pull when updating | |
> cd x264 | |
> sudo ./configure --enable-static --enable-shared | |
> sudo make | |
> sudo make install | |
> x264 --version | |
shows something like | |
> x264 0.130.31 c832fe9 | |
3. install libvpx | |
> cd [YOUR PROJECTS FOLDER] | |
> git clone http://git.chromium.org/webm/libvpx.git // or git pull when updating | |
> cd libvpx | |
> sudo make clean | |
> sudo ./configure | |
> sudo make | |
> sudo make install | |
> vpxenc | |
should show command line options = OK | |
4. install avconv | |
> cd [YOUR PROJECTS FOLDER] | |
> git clone git://git.libav.org/libav.git avconv // or git pull when updating | |
> sudo apt-get install pkg-config // needed so that avconv can detect libraries | |
> sudo ./configure | |
> sudo ./configure --enable-gpl --enable-libx264 --enable-libvpx | |
// when it says it cannot find libx264, try the above command again but with the extra option '--extra-libs=-ldl' | |
> sudo make | |
> sudo make install | |
> avconv -v | |
shows something like | |
> avconv version v9-823-g352dbdb, Copyright (c) 2000-2013 the Libav developers | |
at this point, you have everything ready for local video encoding. now let's focus on emscripten: | |
5. install emscripten: | |
- install it into [YOUR PROJECTS FOLDER]/emscripten | |
- do exactly like prescribed on https://github.com/kripken/emscripten/wiki/Tutorial | |
- make sure you install clang version 3.2 first (NOT 3.1 or 3.3) | |
- also run the suggested tests on the tutorial page. including optimizations. | |
- do not proceed if these tests fail! | |
6. port x264 to javascript | |
> cd [YOUR PROJECTS FOLDER]/x264 | |
> sudo make uninstall | |
> sudo make distclean | |
> git pull | |
> git clean -f | |
> ./../emscripten/emconfigure ./configure --enable-static --disable-thread --disable-asm --extra-cflags="-O2" --extra-ldflags="-v" --host=i686-pc-linux-gnu | |
> ./../emscripten/emmake make | |
now turn the bitcode into js with: | |
> ./../emscripten/emcc -O2 x264.o -o x264.js | |
when done, type 'ls -ltr' and you should see a 374 kB large JS file named 'x264.js' a the bottom which is good. | |
now proceed with the next library libvpx ... | |
7. port libvpx to javascript | |
> cd [YOUR PROJECTS FOLDER]/libvpx | |
> make clean | |
> git pull | |
> git clean -f | |
do these modifications manually in vim for the files /build/make/configure.sh and configure exactly like here: | |
http://code.google.com/r/benjaminmschwartz-libvpx-emscripten/source/detail?r=939cbcc1cea5da4c77af82dc8f9e68cbee04068e&spec=svn939cbcc1cea5da4c77af82dc8f9e68cbee04068e#publish | |
but do not use llvm-ld, it's deprecated. use llvm-link instead. | |
(i have reported this detour to the makers of libvpx here http://code.google.com/p/webm/issues/detail?id=566) | |
okay, now configure and make libvpx! | |
> sudo ./../emscripten/emconfigure ./configure --target=js1-none-clang_emscripten --disable-examples --disable-docs --disable-multithread --disable-runtime-cpu-detect --disable-optimizations --disable-vp8-decoder --disable-vp9-decoder --extra-cflags="-O2" | |
> sudo ./../emscripten/emmake make | |
> ./../emscripten/emcc -O2 libvpx.a -o libvpx.js | |
then type this to check the js file: | |
> ls -ltr | |
you should see a 50kB large libvpx.js file at the bottom. great! | |
8. final step: port avconv to javascript!! | |
see https://gist.github.com/binarykitchen/5329825 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If I want avconv with the whole shebang, then I do this instead:
sudo ./configure \ --enable-gpl --enable-libx264 --enable-libvpx --enable-libfaac \ --enable-libmp3lame --enable-libopus \ --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 \ --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb \ --enable-nonfree --enable-libfreetype --enable-shared --extra-libs="-ldl"