# mk-resource-ffmpeg-build ``` brew uninstall ffmpeg brew tap homebrew-ffmpeg/ffmpeg brew options homebrew-ffmpeg/ffmpeg/ffmpeg brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-decklink ``` need first to map paths to the sdk, but how? ``` export DECKLINK_SDK_INCLUDE_DIR=/path/to/DeckLink_SDK/include export DECKLINK_SDK_LIBRARY_DIR=/path/to/DeckLink_SDK/Mac ``` `/Users/mk/Development/_blackmagic/SDK/Mac/include` `/Users/mk/Development/_blackmagic/SDK/Mac/include/DeckLinkAPI.h` or ``` export DECKLINK_SDK_INCLUDE_DIR=/path/to/DeckLink_SDK/include export DECKLINK_SDK_LIBRARY_DIR=/path/to/DeckLink_SDK/Mac ``` then ``` export DECKLINK_SDK_INCLUDE_DIR=/Users/mk/Development/_blackmagic/SDK/Mac/include export DECKLINK_SDK_LIBRARY_DIR=/Users/mk/Development/_blackmagic/SDK/Mac ``` ``` brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-decklink --with-decklink-sdk=$DECKLINK_SDK_INCLUDE_DIR,$DECKLINK_SDK_LIBRARY_DIR ``` no or ``` export PKG_CONFIG_PATH=/Users/mk/Development/_blackmagic/SDK/Mac:/Users/mk/Development/_blackmagic/SDK/Mac/include:$PKG_CONFIG_PATH ``` ``` --enable-decklink --extra-cflags=-I/PathToDeckLinkSDK/Mac/include --extra-ldflags=-L/PathToDeckLinkSDK/Mac/include ``` ``` brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-decklink --extra-cflags=-I/Users/mk/Development/_blackmagic/SDK/Mac/include --extra-ldflags=-L/Users/mk/Development/_blackmagic/SDK/Mac/include ``` /Users/mk/Development/_blackmagic/SDK/Mac `brew install --build-from-source homebrew-ffmpeg/ffmpeg/ffmpeg ` patterns here: https://github.com/dche/ffmpeg-decklink https://github.com/jb-alvarado/compile-ffmpeg-osx-linux a configure sample: ``` cd ~/ffmpeg_sources wget https://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2 tar -xvf ffmpeg-*.tar.bz2 cd ffmpeg-*/ PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --pkg-config-flags="--static" \ --extra-cflags="-I$HOME/ffmpeg_build/include -I$HOME/ffmpeg_sources/BMD_SDK/include" \ --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ --extra-libs="-lpthread -lm" \ --bindir="$HOME/bin" \ --enable-gpl \ --enable-libass \ --enable-libfdk-aac \ --enable-libfreetype \ --enable-libmp3lame \ --enable-libopus \ --enable-libvorbis \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-nonfree \ --enable-decklink ``` ``` ./configure --extra-cflags=-I/Users/mk/Development/_blackmagic/SDK/Mac/include --extra-ldflags=-L/Users/mk/Development/_blackmagic/SDK/Mac/include --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-decklink ``` ## build from source `brew install automake fdk-aac git lame libass libtool libvorbis libvpx opus shtool texi2html theora wget x264 x265 xvid nasm` other indicates needed: `cmake git wget curl pkg-config nasm autoconf automake libtool autogen gnu-sed sdl2 shtool ninja-build cargo cargo-c` sdl not there `cd /Users/mk/Development/_ffmpeg` `tar jxvf ffmpeg-6.0.tar.xz` ``` git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg cd ffmpeg ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass \ --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame \ --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libopus --enable-libxvid --enable-decklink make ``` ## ffmpeg.rb formula ``` class Ffmpeg < Formula desc "Play, record, convert, and stream audio and video" homepage "https://ffmpeg.org/" version "6.0-with-options" # to distinguish from homebrew-core's ffmpeg license "GPL-2.0-or-later" revision 4 head "https://github.com/FFmpeg/FFmpeg.git", branch: "master" stable do url "https://ffmpeg.org/releases/ffmpeg-6.0.tar.xz" sha256 "57be87c22d9b49c112b6d24bc67d42508660e6b718b3db89c44e47e289137082" # Fix for binutils, remove with `stable` block on next release # https://www.linuxquestions.org/questions/slackware-14/regression-on-current-with-ffmpeg-4175727691/ patch do url "https://github.com/FFmpeg/FFmpeg/commit/effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch?full_index=1" sha256 "9800c708313da78d537b61cfb750762bb8ad006ca9335b1724dbbca5669f5b24" end end option "with-chromaprint", "Enable the Chromaprint audio fingerprinting library" option "with-decklink", "Enable DeckLink support" option "with-fdk-aac", "Enable the Fraunhofer FDK AAC library" option "with-libflite", "Enable text to speech synthesis support via Flite" option "with-game-music-emu", "Enable Game Music Emu (GME) support" option "with-jack", "Enable Jack support" option "with-jpeg-xl", "Enable JPEG XL image format" option "with-libaribb24", "Enable decoding ARIB/ISDB captions" option "with-libmodplug", "Enable module/tracker files as inputs via libmodplug" option "with-libopenmpt", "Enable module/tracker files as inputs via libopenmpt" option "with-librist", "Enable Reliable Internet Stream Transport (RIST) support" option "with-librsvg", "Enable SVG files as inputs via librsvg" option "with-libsoxr", "Enable the soxr resample library" option "with-libssh", "Enable SFTP protocol via libssh" option "with-tesseract", "Enable the tesseract OCR engine" option "with-libvidstab", "Enable vid.stab support for video stabilization" option "with-opencore-amr", "Enable Opencore AMR NR/WB audio format" option "with-openh264", "Enable OpenH264 library" option "with-openjpeg", "Enable JPEG 2000 image format" option "with-openssl", "Enable SSL support" option "with-rav1e", "Enable AV1 encoding via librav1e" option "with-svt-av1", "Enable Scalable Video Technology for AV1" option "with-rtmpdump", "Enable RTMP dumping support" option "with-rubberband", "Enable rubberband library" option "with-two-lame", "Enable TwoLAME, an optimized MPEG Audio Layer 2 (MP2) encoder" option "with-webp", "Enable using libwebp to encode WEBP images" option "with-xvid", "Enable Xvid" option "with-zeromq", "Enable using libzeromq to receive cmds sent through a libzeromq client" option "with-zimg", "Enable z.lib zimg library" option "with-srt", "Enable SRT library" option "with-libvmaf", "Enable libvmaf scoring library" option "with-libxml2", "Enable libxml2 library" option "with-libzvbi", "Enable decoding of DVB teletext pages and DVB teletext subtitles" depends_on "pkg-config" => :build depends_on "aom" depends_on "dav1d" depends_on "fontconfig" depends_on "freetype" depends_on "frei0r" depends_on "lame" depends_on "libass" depends_on "libvorbis" depends_on "libvpx" depends_on "opus" depends_on "sdl2" depends_on "snappy" depends_on "theora" depends_on "x264" depends_on "x265" depends_on "xz" depends_on "aribb24" => :optional depends_on "fdk-aac" => :optional depends_on "game-music-emu" => :optional depends_on "jack" => :optional depends_on "jpeg-xl" => :optional depends_on "libbluray" => :optional depends_on "libbs2b" => :optional depends_on "libcaca" => :optional depends_on "libgsm" => :optional depends_on "libmodplug" => :optional depends_on "libopenmpt" => :optional depends_on "librist" => :optional depends_on "librsvg" => :optional depends_on "libsoxr" => :optional depends_on "libssh" => :optional depends_on "libvidstab" => :optional depends_on "libvmaf" => :optional depends_on "libxml2" => :optional depends_on "opencore-amr" => :optional depends_on "openh264" => :optional depends_on "openjpeg" => :optional depends_on "openssl@1.1" => :optional depends_on "rav1e" => :optional depends_on "rtmpdump" => :optional depends_on "rubberband" => :optional depends_on "speex" => :optional depends_on "srt" => :optional depends_on "svt-av1" => :optional depends_on "tesseract" => :optional depends_on "two-lame" => :optional depends_on "webp" => :optional depends_on "xvid" => :optional depends_on "zeromq" => :optional depends_on "zimg" => :optional uses_from_macos "bzip2" uses_from_macos "zlib" on_linux do depends_on "alsa-lib" depends_on "libxv" end on_intel do depends_on "nasm" => :build end fails_with gcc: "5" # Fix for QtWebEngine, do not remove # https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=270209 patch do url "https://gitlab.archlinux.org/archlinux/packaging/packages/ffmpeg/-/raw/5670ccd86d3b816f49ebc18cab878125eca2f81f/add-av_stream_get_first_dts-for-chromium.patch" sha256 "57e26caced5a1382cb639235f9555fc50e45e7bf8333f7c9ae3d49b3241d3f77" end def install args = %W[ --prefix=#{prefix} --enable-shared --cc=#{ENV.cc} --host-cflags=#{ENV.cflags} --host-ldflags=#{ENV.ldflags} --enable-gpl --enable-libaom --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-demuxer=dash ] if OS.mac? args << "--enable-opencl" args << "--enable-audiotoolbox" args << "--enable-videotoolbox" args << "--enable-neon" if Hardware::CPU.arm? end args << "--disable-htmlpages" # The same info is accessible through the man pages. args << "--enable-chromaprint" if build.with? "chromaprint" args << "--enable-libaribb24" if build.with? "libaribb24" args << "--enable-libbluray" if build.with? "libbluray" args << "--enable-libbs2b" if build.with? "libbs2b" args << "--enable-libcaca" if build.with? "libcaca" args << "--enable-libfdk-aac" if build.with? "fdk-aac" args << "--enable-libflite" if build.with? "libflite" args << "--enable-libgme" if build.with? "game-music-emu" args << "--enable-libgsm" if build.with? "libgsm" args << "--enable-libjxl" if build.with? "jpeg-xl" args << "--enable-libmodplug" if build.with? "libmodplug" args << "--enable-libopenh264" if build.with? "openh264" args << "--enable-libopenjpeg" if build.with? "openjpeg" args << "--enable-libopenmpt" if build.with? "libopenmpt" args << "--enable-librav1e" if build.with? "rav1e" args << "--enable-libsvtav1" if build.with? "svt-av1" args << "--enable-librist" if build.with? "librist" args << "--enable-librsvg" if build.with? "librsvg" args << "--enable-librtmp" if build.with? "rtmpdump" args << "--enable-librubberband" if build.with? "rubberband" args << "--enable-libsoxr" if build.with? "libsoxr" args << "--enable-libspeex" if build.with? "speex" args << "--enable-libsrt" if build.with? "srt" args << "--enable-libssh" if build.with? "libssh" args << "--enable-libtesseract" if build.with? "tesseract" args << "--enable-libtwolame" if build.with? "two-lame" args << "--enable-libvidstab" if build.with? "libvidstab" args << "--enable-libvmaf" if build.with? "libvmaf" args << "--enable-libwebp" if build.with? "webp" args << "--enable-libxml2" if build.with? "libxml2" args << "--enable-libxvid" if build.with? "xvid" args << "--enable-libzimg" if build.with? "zimg" args << "--enable-libzmq" if build.with? "zeromq" args << "--enable-openssl" if build.with? "openssl" # These librares are GPL-incompatible, and require ffmpeg be built with # the "--enable-nonfree" flag, which produces unredistributable libraries args << "--enable-nonfree" if build.with?("decklink") || build.with?("fdk-aac") || build.with?("openssl") if build.with? "decklink" args << "--enable-decklink" args << "--extra-cflags=-I#{HOMEBREW_PREFIX}/include" args << "--extra-ldflags=-L#{HOMEBREW_PREFIX}/include" mv "VERSION", "VERSION.txt" end if build.with? "jack" ENV.prepend_path "PKG_CONFIG_PATH", Formula["jack"].opt_lib/"pkgconfig" args << "--enable-libjack" args << "--enable-indev=jack" end if build.with? "libzvbi" ENV.prepend_path "PKG_CONFIG_PATH", Formula["zvbi"].opt_lib/"pkgconfig" args << "--enable-libzvbi" end args << "--enable-version3" if build.with?("opencore-amr") || build.with?("libvmaf") if build.with? "opencore-amr" args << "--enable-libopencore-amrnb" args << "--enable-libopencore-amrwb" end system "./configure", *args system "make", "install" # Build and install additional FFmpeg tools system "make", "alltools" bin.install Dir["tools/*"].select { |f| File.executable? f } mv bin/"python", pkgshare/"python", force: true if build.with? "tesseract" opoo <<~EOS The default `tesseract` dependency includes limited language support. To add all supported languages, install the `tesseract-lang` formula. EOS end end test do # Create an example mp4 file mp4out = testpath/"video.mp4" system bin/"ffmpeg", "-filter_complex", "testsrc=rate=1:duration=1", mp4out assert_predicate mp4out, :exist? end end ``` ## again from https://www.rickmakes.com/compiling-ffmpeg-on-mac-with-apple-silicon-requires-macports/ `sudo port selfupdate` `` `cd /Users/mk/Development/_ffmpeg` `tar jxvf ffmpeg-6.0.tar.xz` ``` sudo port -N install libass libfdk-aac lame libopus libtheora libogg libvorbis libbluray dav1d libmodplug libmodplug librsvg speex x265 XviD libsdl2 gnutls soxr openjpeg x264 ``` ``` ./configure --prefix=/opt/local --enable-swscale --enable-avfilter --enable-avresample --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-librsvg --enable-libtheora --enable-libopenjpeg --enable-libmodplug --enable-libsoxr --enable-libspeex --enable-libass --enable-libbluray --enable-lzma --enable-gnutls --enable-fontconfig --enable-libfreetype --enable-libfribidi --disable-libjack --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-indev=jack --enable-opencl --disable-outdev=xv --enable-audiotoolbox --enable-videotoolbox --enable-sdl2 --disable-securetransport --mandir=/opt/local/share/man --enable-static --enable-pthreads --cc=/usr/bin/clang --enable-libdav1d --enable-libx265 --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid --enable-nonfree --enable-libfdk-aac --extra-ldflags=-L/opt/local/lib ``` --extra-cflags=-I/Users/mk/Development/_blackmagic/SDK/Mac/include --extra-ldflags=-L/Users/mk/Development/_blackmagic/SDK/Mac/include ``` ./configure --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libopenjpeg --enable-fontconfig --enable-libfreetype --enable-libfribidi --enable-opencl --disable-outdev=xv --enable-audiotoolbox --enable-videotoolbox --enable-sdl2 --disable-securetransport --mandir=/opt/local/share/man --enable-static --enable-pthreads --cc=/usr/bin/clang --enable-libdav1d --enable-libx265 --enable-gpl --enable-postproc --enable-libx264 --enable-nonfree --enable-libfdk-aac --extra-ldflags=-L/opt/local/lib --extra-cflags=-I/Users/mk/Development/_blackmagic/SDK/Mac/include --extra-ldflags=-L/Users/mk/Development/_blackmagic/SDK/Mac/include --enable-decklink ``` ``` ./configure --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libvorbis --enable-libopus --enable-libtheora --enable-libopenjpeg --enable-libmodplug --enable-libass --enable-libbluray --enable-lzma --enable-gnutls --enable-fontconfig --enable-libfreetype --enable-libfribidi --disable-libjack --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-indev=jack --enable-opencl --disable-outdev=xv --enable-audiotoolbox --enable-videotoolbox --enable-sdl2 --disable-securetransport --mandir=/opt/local/share/man --enable-static --enable-pthreads --cc=/usr/bin/clang --enable-libdav1d --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid --enable-nonfree --enable-libfdk-aac --extra-ldflags=-L/opt/local/lib --extra-cflags=-I/Users/mk/Development/_blackmagic/SDK/Mac/include --extra-ldflags=-L/Users/mk/Development/_blackmagic/SDK/Mac/include --enable-decklink --extra-ldflags=-L/opt/homebrew/lib --extra-cflags=-I/opt/homebrew/include ``` make -j 12 ## gists segments. `ffmpeg -f avfoundation -framerate 24 -video_size 1920x1080 -i "Blackmagic Design" -c:v libx264 -t 600 -f segment -segment_time 10 -reset_timestamps 1 -segment_format mkv /Users/mk/Development/_blackmagic/_output/output_%03d.mkv` `ffmpeg -f avfoundation -framerate 24 -video_size 1920x1080 -i "Blackmagic Design" -c:v libx264 -t 60 -f segment -segment_time 10 -segment_format mkv /Users/mk/Development/_blackmagic/_output/output_%03d.mkv` `ffmpeg -f avfoundation -framerate 24 -video_size 1920x1080 -i "Blackmagic Design" -c:v libx264 -t 10 /Users/mk/Development/_blackmagic/_output/output-3.mkv` ffmpeg -f avfoundation -framerate 24 -video_size 1920x1080 -i "Blackmagic Design" -c:v libx264 -t 60 -f segment -segment_time 5 -reset_timestamps 1 /Users/mk/Development/_blackmagic/_output/output_%03d.mkv ffmpeg -f avfoundation -framerate 24 -video_size 1920x1080 -i "Blackmagic Design" -c:v libx264 -t 10 /Users/mk/Development/_blackmagic/_output/output-3.mkv ffmpeg -f avfoundation -framerate 24 -video_size 1920x1080 -i "Blackmagic Design" -t 10 "/Users/mk/Development/_blackmagic/_output/output.mkv