• Stars
    star
    173
  • Rank 220,124 (Top 5 %)
  • Language
    C++
  • License
    GNU Lesser Genera...
  • Created almost 9 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A program that can scan existing FFmpeg/LibAV source files and dynamically generate a Visual Studio project file.

FFVS-Project-Generator

Build status Github All Releases GitHub release GitHub issues license donate

About

The FFmpeg VS Project Generator is a standalone program that can be used to create a custom Visual Studio project within a FFmpeg source code distribution. This program allows for the created Visual Studio project to be customised using virtually any of the options supported by FFmpegs default configure script. This allows for selecting which dependency libraries and codec/format support should be built into the created project file. With the output project FFmpeg libraries and programs can be built and debugged directly within Visual Studio.

FFmpeg

FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata. https://ffmpeg.org

Downloads

Pre-built executables are available from the releases page in a single archive containing both 32bit and 64bit versions.

Generating Custom Project Files

This project comes with the ffmpeg_generator program which can be used to build custom project files. This program accepts many of the configuration parameters that are supported by FFmpegs standard configure script (see FFmpegs documentation for more details). These options can be used to disable/enable specific options that define how FFmpeg is built. Using ffmpeg_generator a new project can be built using these options.

To generate a custom project using different configuration options simply build ffmpeg_generator and then run it by passing in the desired config options. In order for the generator to run it must have access to the ffmpeg source files that should be built into the new generated project. The generator will search for the source configure file in order to find what options are avilable for the current sources. This file must be accessible for the program to run, if the generator cannot find the configure files location then the input command option --rootdir= can be used to specify its location.

For example to build FFmpeg without any additional dependencies:

ffmpeg_generator.exe --enable-gpl --enable-version3 --disable-bzlib --disable-iconv --disable-zlib --disable-lzma --disable-sdl --toolchain=msvc

As well as enabling/disabling dependency libraries, specific config options can also be enabled/disabled. For instance a project that does not require yasm can be built by passing --disable-yasm. Specific FFmpeg programs can also be disabled such as --disable-ffprobe which will prevent a project file being generated for the FFmpeg program ffprobe.

The generator is designed to automatically resolve dependencies so if a configure option is disabled all options that depend on it will also be disabled accordingly.

For a complete list of available commands the --help option can be passed to the generator. This will give the complete list of accepted options based on the current sources.

By default the generator will build a project using the latest available toolchain detected on the host computer. This can be changed by hand in the generated projects properties Project Configuration->General->Platform Toolset if an older toolset is desired. The generator also supports use of the Intel compiler. The --toolchain= option can be used to change between standard Microsoft compiler (msvc) and the Intel compiler (icl).

Note: FFmpeg requires C99 support in order to compile. Only Visual Studio 2013 or newer supports required C99 functionality and so any older version is not supported. Visual Studio 2013 or newer is required. If using an older unsupported version of Visual Studio the Intel compiler can be used to add in the required C99 capability.

The project generator will also check the availability of dependencies. Any enabled options must have the appropriate headers installed in *OutputDir otherwise an error will be generated.

Sevaral automated batch files are supplied with the project that can be used to generate FFmpeg projects based on dependencies provided by ShiftMediaProject (smp_project_generate_gpl etc.). These batch files can be used to build projects based on various configurations and they can also optionally download all the appropriate dependency libraries that are supplied by ShiftMediaProject.

  • OutputDir is the Output Directory specified in the project properties.
    Note: There is a different OutputDir for 32/64bit configurations. Lib's and DLL's should be placed in the correct directory.
    Any header files will need to be placed in the Output directories include folder OutputDir\include.
    By default the 32bit lib OutputDir is OutputDir/lib/x86 and 64bit is OutputDir/lib/x64. DLLs follow a similar scheme except using OutputDir/bin/x86 and for 64bit OutputDir/bin/x64.
    The default value of OutputDir is ....\msvc relative to the FFmpeg source directory. An example of the expetced directory structure is:
    • msvc (OutputDir)
    • source >
      • FFmpeg
      • ..Any other libraries source code..

Using the Supplied Dependency Projects

Many of the possible FFmpeg dependencies (and their dependencies) are provided by the ShiftMediaProject repositories.

Many of the possible FFmpeg dependencies (and there dependencies) are available in the ShiftMediaProject repositories. However the following is a list of extra dependency options that require external downloads if used:

  1. opengl (requires glext)
    1. Download glext.h and wglext.h from opengl.org.
    2. Save the header files into OutputDir/include/gl/*.
  2. opencl (requires latest Intel/AMD OpenCL or NVIDIA CUDA SDK)
    1. Download either the "Intel OpenCL SDK", "AMD OpenCL SDK" or the "NVIDIA CUDA SDK" from their respective suppliers.
    2. Install the downloaded SDK wherever desired.
  3. ffnvcodec/nvdec/nvenc (requires nv-codec-headers)
    1. Download the nv-codec-headers repository from https://github.com/FFmpeg/nv-codec-headers
    2. Save the contents of the nv-codec-headers repositories "include" folder into "OutputDir/include/*".
  4. cuda-sdk (requires latest NVIDIA CUDA SDK)
    1. Download the NVIDIA CUDA SDK from the NVIDIA website
    2. Install the downloaded SDK wherever desired.
  5. amf (requires Advanced Media Framework (AMF) SDK headers)
    1. Download the AMF repository from https://github.com/GPUOpen-LibrariesAndSDKs/AMF
    2. Save the contents of the AMF repositories "amf/public/include" into "OutputDir/include/AMF/*".
  6. decklink (requires Blackmagic DeckLink SDK)
    1. Download the "Blackmagic DeckLink SDK" from the Blackmagic website.
    2. Extract the downloaded SDK wherever desired.
    3. Run the following command from a Visual Studio developer command prompt in the "Win/include" folder: midl /win32 /h DeckLinkAPI.h DeckLinkAPI.idl
    4. Copy the newly created "DeckLinkAPI.h" and "DeckLinkAPI_i.c" files to OutputDir/include/*.

Any dependencies supplied by ShiftMediaProject should be downloaded next to the FFmpeg folder as they will use the same OutputDir location. Projects to build each dependency can be found in the respective repository ./SMP directories.

Only dependencies built from supplied ShiftMediaProject repositories are tested and supported. Using compiled dependencies from other sources may result in version or other issues. Although these external sources generally work fine any problems associated with them are not covered by ShiftMediaProject and so they should be used with discretion.

Building with ASM

If the enable-nasm option is used to generate a project then in order to use the output project file using msvc you must first download and install NASM. NASM is required to compile all used assembly files.

  1. Visual Studio NASM integration can be downloaded from https://github.com/ShiftMediaProject/VSNASM/releases/latest
  2. Once downloaded simply follow the install instructions included in the download.

Note: Older source versions of FFmpeg used YASM for assembly compilation instead of NASM if using an older source release then YASM integration will be needed instead. The installation of YASM is identical to that of NASM https://github.com/ShiftMediaProject/VSYASM/releases/latest

License

FFVS-Project-Generator itself is released under LGPLv2. The generated output project(s) and source can be used with existing FFmpeg source code such that any resultant binaries created by the generated projects will still conform to the license of the FFmpeg source code itself. This means the output binaries are licensed based on the command line specified when generating the projects (i.e. --enable-gpl etc.).

More Repositories

1

x264

Unofficial X264 with added custom native Visual Studio project build tools. X264: A free software library and application for encoding video streams into the H.264/MPEG-4 AVC format.
C
183
star
2

VSNASM

Provides Visual Studio integration for the NASM assembler.
Batchfile
141
star
3

gmp

Unofficial GMP with added custom native Visual Studio project build tools. GMP: GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers.
C
82
star
4

VSYASM

Provides Visual Studio integration for the YASM assembler.
Batchfile
57
star
5

libvpx

Unofficial LibVPX with added custom native Visual Studio project build tools. LibVPX: VP8/VP9 Codec SDK.
C
38
star
6

libbluray

Unofficial LibBluray with added custom native Visual Studio project build tools. LibBluray: libbluray is an open-source library designed for Blu-Ray Discs playback for media players.
Java
32
star
7

x265

Unofficial X265 with added custom native Visual Studio project build tools. X265: x265 is an open-source project and free application library for encoding video streams into the H.265/High Efficiency Video Coding (HEVC) format.
Assembly
30
star
8

libgcrypt

Unofficial LibGCrypt with added custom native Visual Studio project build tools. LibGCrypt: Libgcrypt is a general purpose cryptographic library based on the code from GnuPG.
C
27
star
9

libssh

Unofficial LibSSH with added custom native Visual Studio project build tools. LibSSH: Mulitplatform C library implementing the SSHv2 and SSHv1 protocol for client and server implementations.
C
27
star
10

gnutls

Unofficial GnuTLS with added custom native Visual Studio project build tools. GnuTLS: GnuTLS is a secure communications library implementing the SSL, TLS and DTLS protocols and technologies around them.
C
23
star
11

nettle

Unofficial Nettle with added custom native Visual Studio project build tools. Nettle: Nettle is a cryptographic library that is designed to fit easily in more or less any context.
C
23
star
12

libcdio

Unofficial LibCDIO with added custom native Visual Studio project build tools. LibCDIO: The GNU Compact Disc Input and Control library (libcdio) contains a library for CD-ROM and CD image access.
C
18
star
13

liblzma

Unofficial LibLZMA with added custom native Visual Studio project build tools. LibLZMA: liblzma is a lzma compression library with API similar to that of zlib.
C
18
star
14

xvid

Unofficial XVid with added custom native Visual Studio project build tools. Xvid: A high performance and high quality MPEG-4 video de-/encoding solution.
C
15
star
15

libiconv

Unofficial Libiconv with added custom native Visual Studio project build tools. Libiconv: An iconv() implementation, for use on systems which don't have one, or whose implementation cannot convert from/to Unicode.
C
14
star
16

soxr

Unofficial Soxr with added custom native Visual Studio project build tools. Soxr: A library for performing one-dimensional sample-rate conversion.
C
13
star
17

rtmpdump

***This project is no longer updated***. Unofficial RTMPdump with added custom native Visual Studio project build tools. RTMPdump: A toolkit for RTMP streams.
C
13
star
18

fontconfig

Unofficial Fontconfig with added custom native Visual Studio project build tools. Fontconfig: Fontconfig is a library for configuring and customizing font access.
C
13
star
19

game-music-emu

Unofficial LibGME with added custom native Visual Studio project build tools. LibGME: Game_Music_Emu is a collection of video game music file emulators.
C++
12
star
20

libbdplus

Unofficial LibBDPlus with added custom native Visual Studio project build tools. LibBDPlus: libbdplus is a research project to implement the BD+ System Specifications. This research project provides, through an open-source library, a way to understand how the BD+ works.
C
11
star
21

SDL

Unofficial SDL with added custom native Visual Studio project build tools. SDL: SDL Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D.
C
10
star
22

libaacs

Unofficial LibAACS with added custom native Visual Studio project build tools. LibAACS: libaacs is a research project to implement the Advanced Access Content System specification. This research project provides, through an open-source library, a way to understand how the AACS works.
C
10
star
23

freetype2

Unofficial Freetype with added custom native Visual Studio project build tools. FreeType2: A freely available software library to render fonts.
C
9
star
24

libxml2

Unofficial LibXML2 with added custom native Visual Studio project build tools. LibXML2: Libxml2 is the XML C parser and toolkit developed for the Gnome project (but usable outside of the Gnome platform), it is free software available under the MIT License.
C
8
star
25

libdvdcss

Unofficial LibDVDCSS with added custom native Visual Studio project build tools. LibDVDCSS : libdvdcss is a simple library designed for accessing DVDs like a block device without having to bother about the decryption.
C
8
star
26

bzip2

Unofficial BZip2 with added custom native Visual Studio project build tools. BZip2: A freely available, patent free, high-quality data compressor.
C
7
star
27

ShiftMediaProject.github.io

CSS
6
star
28

libgpg-error

Unofficial LibGPG-Error with added custom native Visual Studio project build tools. LibGPG-Error: Libgpg-error is a small library with error codes and descriptions shared by most GnuPG related software.
C
6
star
29

modplug

Unofficial Modplug with added custom native Visual Studio project build tools. Modplug: A ModPlug audio rendering engine.
C++
5
star
30

libdvdread

Unofficial LibDVDRead with added custom native Visual Studio project build tools. LibDVDRead: libdvdread provides a simple foundation for reading DVD video disks. It provides the functionality that is required to access many DVDs.
C
5
star
31

libdvdnav

Unofficial LibDVDNav with added custom native Visual Studio project build tools. LibDVDNav: libdvdnav is a library for developers of multimedia applications. It allows easy use of sophisticated DVD navigation features such as DVD menus, multiangle playback and even interactive DVD games.
C
5
star
32

expat

***This project is no longer updated (in favour of LibXML2)***. Unofficial Expat with added custom native Visual Studio project build tools. Expat: Expat is an XML parser library written in C.
C
3
star