Scripts and patches to cross-compile, for Windows 64-bit, many multimedia utilities, including FFmpeg, SoX, the mpv player, and all the BBC Avid-compatible MXF utilities. Also includes GraphicMagick, Poppler-utils (for PDF files), filezilla and many, many more.
How To Install
A compressed binary package is available for download from this address: http://gallery.johnwarburton.net/MultimediaTools-mingw-w64-Open-source.exe
These files are tested here when installed to C:\Program Files\ffmpeg. Other locations may work, but have not been tested.
These binaries are for Windows 64-bit editions only, and have been tested only on Windows 10.
Your Windows installation needs to have certain packages installed:
- Python 3.9 or later
- Perl, the multi-threaded version
...and, if you use some of my scripts for on-line television viewing,
- The Python m3u8 module (run "pip install m3u8" from an Administrator prompt)
The installer sets certain environment variables for some facilities to work properly. You'll find them in build_shared.sh
You may need to run fc-cache.exe as an Administrator, to help fontconfig put a cache of your Windows fonts into a suitable place. I'd make the installer do it for you, but I haven't worked out how to do this yet.
You might also want to play with the defaults for the mpv player, in %APPDATA%\Roaming\mpv (mpv.conf). It's a highly configurable player, and you will probably want to adjust it manually for best performance in your environment. An example file is included in this distribution in the share directory for mpv. Copy it to where you need it.
How To Compile
- Compiling is becoming increasingly difficult. Source packages are constantly being updated (for which we rejoice, of course), and I am keeping up with these changes quite well. However, some changes that might break compilation go un-noticed because I only accomplish a completely clean build about once a month. This does not affect the latest and greatest versions of ffmpeg, mpv, vim/gvim, x264, x265 and their associated libraries that are all compiled from development sources.
- Ensure your development requirement is adequate. I now develop on a virtual machine, using Debian Testing running under WSL2. Remember to include contrib and non-free in your sources under /etc/apt/sources.list
- Update everything.
apt update apt upgrade
- Install the pre-requisites. On Debian 11 running under WSL2, you can do this.
First, you'll want a more up-to-date version of meson that the distribution provides. (Latest Debian 11 doesn't need this.) Edit /etc/apt/sources.list and install
deb http://deb.debian.org/debian bullseye-backports main contrib non-free deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free
Now, install some packages using the usual package manager.
sudo apt install git g++ make cmake texinfo libgmp-dev flex bison m4 libmpfr-dev libz-dev wget curl autoconf autopoint libtool bzip2 meson pkg-config gettext subversion nasm yasm libtool-bin python3-setuptools intltool autoconf-archive gperf unzip python2 gyp libglib2.0-dev mm-common python3-bs4 python3-requests zip python3-mako docbook-xsl rake wx-common nsis sshpass rsync lzip pandoc
sudo apt -t bullseye-backports install meson
Make sure everything can see your Python 3
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1
Then, ensure your gcc is the one we have just installed -- if you need to. A clean Debian install doesn't need this.
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
- Clone my package from git (see the address at the top of this page).
- cd into the top directory of the git tree.
- Read the top of ./build_shared.sh, and edit the location to which scp should copy your binary archive.
- Execute ./build_shared.sh, and give it the password for your scp when prompted. Note: you'll need to ssh into the machines where you're copying these files before this upload will work.
- Wait for a long, long time. On an eight-core i7 at 4.5GHz with 16GB RAM and solid state drives, the compile takes four hours.
- The archive you can copy and unpack has been placed in the root of your build tree and has been sent by scp to the webserver of your choice. Note that the scp copy will only succeed if you have already used ssh to login to the remote server under the username you're using.
- To recompile only the packages that have been updated, simply run the script again. You may need manually to clear out mpv, aom, vim and vim_console
With these scripts, you can compile binaries, ready to run on 64-bit Windows. Many libraries are included. Here are some of the executables that link to these libraries. THIS LIST IS SERIOUSLY OUT OF DATE.
- aac-enc — simple AAC encoder including HE-AACv2 and two low-delay versions of the codec
- fdkaac — complex and fine-tuned AAC encoder allowing adjustment of many parameters
- GraphicsMagick, an improvement on ImageMagick, including the following utilities:
- compare — compare two images
- composite — composite images together
- conjure — execute a Magick Scripting Language (MSL) XML script
- convert — convert an image or a sequence of images
- gm — interface to many GraphicsMagic tools
- identify — describe an image or an image sequence
- mogrify — transform an image or an image sequence
- montage — create a composite image in a grid from separate images
- ffmpeg — a very full build of the multimedia file processing utility
- ffplay — simple command-line multimedia player
- ffprobe — prints information gleaned by FFmpeg libraries from a given file
- fftw-wisdom — create pre-planned/optimised transforms for specified sizes
- SoX — the Swiss Army Knife of audio
- sox — the command-line audio utility with many built-in effects
- soxi — gives information about audio files
- play — plays and optionally processes audio data using the capabilities of sox
- rec — records audio data using the capabilities of sox
- Filezilla, the graphical file transfer utility
- mjpegtools — many tools for motion JPEG files and DVD creation
- mpeg2enc — flexible program to encode MPEG2 video streams
- mplex — multiplexes many types of MPEG streams
- jpeg2yuv — pipes a sequence of JPEG files to stdout, converted to YUV
- lav2wav — extracts audio from lav-readable files
- lav2yuv — converts MJPEG video sequence to raw YUV data
- lavaddwav — adds a WAV file as a soundtrak to an AVI file
- lavpipe — creates raw YUV streams from pipe list scripts
- lavplay — plays and edits MJPEG video, including certain hardware acceleration
- lavtrans — converts MJPEG videos to other MJPEG video formats
- matteblend.flt — unknown - takes 3 parameters
- mjpeg_simd_helper — returns list of possible values for environment variable MJPEGTOOLS_SIMD_DISABLE
- multiblend.flt — blends two MJPEG streams by selectable mask
- png2yuv — pipes a sequence of PNG files to stdout as YUV4MPEG data stream
- pnmtoy4m — reads raw PNM/PAM images and produces YUV4MPEG2 stream on stdout. Converts colourspace
- ppmtoy4m — reads raw PPM images and produes YUV4MPEG2 stream out stdout. Converts colourspace
- transist.flt — reads two frame-interlaced YUV4MPEG streams from stdin and writes out translation from one to the other
- y4mcolorpars — generates standard SMPTE test pattern
- y4mstabilizer — stabilizes video stream
- y4mtopnm — reads YUV4MPEG2 stream on stdin, produces PPM, PGM or PAM images on stdout. Converts colourspace
- y4mtoppm — reads YUV4MPEG2 stream on stdin, produces PPM, PGM or PAM images on stdout. Converts colourspace
- ypipe — interlaces output of two YUV4MPEG-emitting programs into one output stream
- yuv2lav — converts raw YUV data to MJPEG video sequence
- yuvfps — resamples yuv video stream to dfferent frame rate
- yuvinactive — sets part of incoming image to be blank or filled with colour
- yuvplay — plays back an MJPEG file with various alterations if requested
- y4mdenoise — denoises video according to several user-selectable methods
- y4mscaler — scales incoming video in a flexible way
- y4munsharp — applies unsharp filter to video, optionally legalizes output
- pgmtoy4m — converts the PGM output of "mpeg2dec -o pgmpipe" to YUV4MPEG2
- y4mblack — creates black video
- y4mhist — creates text-mode histogram/vectorscope from incoming video
- y4minterlace — creates interlaced output from double-frame-rate progressive input
- y4mivtc — removes 2:3 pulldown correctly
- y4mshift — shifts picture data within the frame
- y4mspatialfilter — FIR filter for noise/bandwidth reduction without scaling
- y4mtoyuv — converts YUV4MPEG2 to EYUV format
- yuv4mpeg — converts EYUV to YUV4MPEG2
- yuvmedianfilter — looks around the current point for a radius and averages values within threshold
- yuyvtoy4m — relacks YUYV and UYVY into YUV4MPEG2
- yuvcorrect — applies many colour and interlacing corrections
- yuvdeinterlae — deinterlaces applying motion compensation
- yuvdenoise — reduces noise temporally or specially, with fine-tuning
- yuvkineco — automatically try to remove pulldown patterns
- yuvycsnoise — denoiser especially for NTSC Y/C separation noise
- yuvscaler — scales incoming video to many pre-set sizes
- synaesthesia - the original sound-to-light program
- libmovit - for image processing in certain applications
- libdv — processing library and some utilities for DV digital video streams
- dubdv — inserts audio into a DV stream, discarding existing audio if any
- encodedv — encodes incoming uncompressed video or image sequence into DV format
- fix_headers — might fix DV headers. Documentation and code comments non-existent
- scan_packet_headers — appears to perform basic packet detection on DV stream into stdin
- steal_header — appears to write header from one stream onto data of another
- as3compile — a stand-alone ActionScript 3.0 compiler to SWF
- font2swf — converts a freetype-supported font to SWF
- jpeg2swf — creates SWF from JPEG files
- png2swf — creates SWF from PNG files
- swfbbox — calculates, dis