OSX comes with a command line video conversion utility avconvert but this tool provides limited functionality compared to the avconv provided by libav.
How can I install avconv on OS X (or macOS 11)?
14 Answers
Just install it with brew:
brew install libav 1 First grab the library:
wget
# use for the latest snapshot
tar -xvzf libav-10.1.tar.gz
cd libav-10.1Set up the dependencies with MacPorts (or other package managers such as Homebrew):
sudo port install yasm zlib bzip2 faac lame speex libogg libvorbis libtheora libvpx x264 XviD openjpeg15 opencore-amr freetypeBuild libav:
./configure \
--extra-cflags=-I/opt/local/include --extra-ldflags=-L/opt/local/lib \
--enable-gpl --enable-libx264 --enable-libxvid \
--enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb \
--enable-nonfree --enable-libfaac \
--enable-libmp3lame --enable-libspeex --enable-libvorbis --enable-libtheora --enable-libvpx \
--enable-libopenjpeg --enable-libfreetype --enable-doc --enable-gnutls --enable-shared
make && sudo make installThen you can run avconv:
avconv -i input.avi -c:v libx264 -preset slow -crf 18 output.mp4x264 +asmseems to be required to get workingcpu-capabilities, so if you don't get them (ie.[libx264 @ 0x7fe66101a800] using cpu capabilities: none!) run:
sudo port upgrade --enforce-variants x264 +asm
You should get sth like: [libx264 @ 0x7fc62401b600] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
For those without brew - and until macports come up with a port for libav, here are my notes for installing libav on OSX 10.8.5 from source (libav version 12_dev0, from github).
The main problem I faced was that libav uses sem_timedwait() (semaphore.h in linux) which is not defined in macos.
This post mentions that Keith Shortridge of the Australian Astronomical Observatory's software group (thanks) have written an implementation of said function for macos which can be found here
Download the two files into ${LIBAVDIR}/libavdevice and then add the following line in the header file sem_timedwait.h:
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
Then edit the Makefile in ${LIBAVDIR}/libavdevice and add sem_timedwait.o at the end of the OBJS variable
configure and make all
you are good to go.
for the record, I used the following configure command:
./configure --extra-cflags=-I/opt/local/include --extra-ldflags=-L/opt/local/lib --enable-gpl --enable-libx264 --enable-libxvid --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-nonfree --enable-libfaac --enable-libmp3lame --enable-libspeex --enable-libvorbis --enable-libtheora --enable-libvpx --enable-libopenjpeg --enable-libfreetype --enable-doc --enable-gnutls --prefix=/opt/local
WARNING: I can not say or guarantee whether the said implementation of sem_timedwait() is the correct one and/or will have no side-effects to the working of libav or indeed any other part of the system which links to libav libraries which have now a sem_timedwait() implementation in there!!!! For the latter may I suggest renaming sem_timedwait() everywhere in your copy of libav and Keith's implementation. Also check if any other symbols are exported from sem_timedwait.o and rename them also.
Here are the new, renamed symbols from Keith Shortridge's implementation of sem_timedwait():
sem_timedwait_keith, timeoutThreadMain_keith, triggerSignal_keith, ignoreSignal_keith, timeoutThreadCleanup_keith
(remove _keith to get the original names). The only reference to sem_timedwait() in libav (for said version) is in jack.c.
For videos hosted on https (many, these days), make sure you build avconv with OpenSSL support:
brew install libav --with-openssl