homebrew-core/Formula/ffmpeg.rb

201 lines
8 KiB
Ruby
Raw Normal View History

2011-03-10 05:11:03 +00:00
class Ffmpeg < Formula
desc "Play, record, convert, and stream audio and video"
homepage "https://ffmpeg.org/"
url "https://ffmpeg.org/releases/ffmpeg-3.0.2.tar.bz2"
sha256 "30e3c77c2f4c358ed087869455a7496cbd7753a5e1b98d20ba49c1004009fd36"
head "https://github.com/FFmpeg/FFmpeg.git"
2014-02-22 17:34:49 +00:00
bottle do
2016-04-28 07:16:23 +00:00
sha256 "427e874885b03997de009cec923ed9872a498ff431bc24d007c191658e4633b3" => :el_capitan
sha256 "eb9ab80d69d69e2c4b6d311b3b84ce3e9539f5c1962187d4e018a29424c627a0" => :yosemite
sha256 "b6eb3f5481b89b4031bd1f4146f34b2e8736625c1cca29f14cffdfd2511fdfe6" => :mavericks
2014-02-22 17:34:49 +00:00
end
option "without-x264", "Disable H.264 encoder"
2012-08-24 05:50:43 +00:00
option "without-lame", "Disable MP3 encoder"
option "without-xvid", "Disable Xvid MPEG-4 video encoder"
option "without-qtkit", "Disable deprecated QuickTime framework"
2012-08-24 05:50:43 +00:00
option "with-rtmpdump", "Enable RTMP protocol"
option "with-libass", "Enable ASS/SSA subtitle format"
2014-06-04 14:33:33 +00:00
option "with-opencore-amr", "Enable Opencore AMR NR/WB audio format"
option "with-openjpeg", "Enable JPEG 2000 image format"
option "with-openssl", "Enable SSL support"
option "with-libssh", "Enable SFTP protocol via libssh"
2014-06-04 14:33:33 +00:00
option "with-schroedinger", "Enable Dirac video format"
option "with-ffplay", "Enable FFplay media player"
option "with-tools", "Enable additional FFmpeg tools"
option "with-fdk-aac", "Enable the Fraunhofer FDK AAC library"
option "with-libvidstab", "Enable vid.stab support for video stabilization"
option "with-x265", "Enable x265 encoder"
option "with-libsoxr", "Enable the soxr resample library"
option "with-webp", "Enable using libwebp to encode WEBP images"
option "with-zeromq", "Enable using libzeromq to receive commands sent through a libzeromq client"
option "with-snappy", "Enable Snappy library"
option "with-dcadec", "Enable dcadec library"
option "with-rubberband", "Enable rubberband library"
option "with-zimg", "Enable z.lib zimg library"
option "with-openh264", "Enable OpenH264 library"
2014-06-04 14:33:33 +00:00
depends_on "pkg-config" => :build
# manpages won't be built without texi2html
depends_on "texi2html" => :build
2014-06-04 14:33:33 +00:00
depends_on "yasm" => :build
depends_on "x264" => :recommended
depends_on "lame" => :recommended
depends_on "xvid" => :recommended
depends_on "faac" => :optional
depends_on "fontconfig" => :optional
2014-06-04 14:33:33 +00:00
depends_on "freetype" => :optional
depends_on "theora" => :optional
depends_on "libvorbis" => :optional
depends_on "libvpx" => :optional
depends_on "rtmpdump" => :optional
depends_on "opencore-amr" => :optional
depends_on "libass" => :optional
depends_on "openjpeg" => :optional
depends_on "sdl" if build.with? "ffplay"
depends_on "snappy" => :optional
2014-06-04 14:33:33 +00:00
depends_on "speex" => :optional
depends_on "schroedinger" => :optional
depends_on "fdk-aac" => :optional
depends_on "opus" => :optional
depends_on "frei0r" => :optional
depends_on "libcaca" => :optional
depends_on "libbluray" => :optional
depends_on "libsoxr" => :optional
2014-06-04 14:33:33 +00:00
depends_on "libvidstab" => :optional
depends_on "x265" => :optional
depends_on "openssl" => :optional
depends_on "libssh" => :optional
depends_on "webp" => :optional
depends_on "zeromq" => :optional
depends_on "libbs2b" => :optional
depends_on "dcadec" => :optional
depends_on "rubberband" => :optional
depends_on "zimg" => :optional
depends_on "openh264" => :optional
def install
args = ["--prefix=#{prefix}",
"--enable-shared",
"--enable-pthreads",
"--enable-gpl",
"--enable-version3",
"--enable-hardcoded-tables",
"--enable-avresample",
"--cc=#{ENV.cc}",
"--host-cflags=#{ENV.cflags}",
"--host-ldflags=#{ENV.ldflags}",
]
2015-08-04 23:23:46 +00:00
args << "--enable-opencl" if MacOS.version > :lion
2014-06-04 14:33:33 +00:00
args << "--enable-libx264" if build.with? "x264"
args << "--enable-libmp3lame" if build.with? "lame"
args << "--enable-libxvid" if build.with? "xvid"
args << "--enable-libsnappy" if build.with? "snappy"
2014-06-04 14:33:33 +00:00
args << "--enable-libfontconfig" if build.with? "fontconfig"
2014-06-04 14:33:33 +00:00
args << "--enable-libfreetype" if build.with? "freetype"
args << "--enable-libtheora" if build.with? "theora"
args << "--enable-libvorbis" if build.with? "libvorbis"
args << "--enable-libvpx" if build.with? "libvpx"
args << "--enable-librtmp" if build.with? "rtmpdump"
args << "--enable-libopencore-amrnb" << "--enable-libopencore-amrwb" if build.with? "opencore-amr"
args << "--enable-libfaac" if build.with? "faac"
2014-06-04 14:33:33 +00:00
args << "--enable-libass" if build.with? "libass"
args << "--enable-ffplay" if build.with? "ffplay"
args << "--enable-libssh" if build.with? "libssh"
2014-06-04 14:33:33 +00:00
args << "--enable-libspeex" if build.with? "speex"
args << "--enable-libschroedinger" if build.with? "schroedinger"
args << "--enable-libfdk-aac" if build.with? "fdk-aac"
args << "--enable-openssl" if build.with? "openssl"
args << "--enable-libopus" if build.with? "opus"
args << "--enable-frei0r" if build.with? "frei0r"
args << "--enable-libcaca" if build.with? "libcaca"
args << "--enable-libsoxr" if build.with? "libsoxr"
2014-06-04 14:33:33 +00:00
args << "--enable-libvidstab" if build.with? "libvidstab"
args << "--enable-libx265" if build.with? "x265"
args << "--enable-libwebp" if build.with? "webp"
args << "--enable-libzmq" if build.with? "zeromq"
args << "--enable-libbs2b" if build.with? "libbs2b"
args << "--enable-libdcadec" if build.with? "dcadec"
args << "--enable-librubberband" if build.with? "rubberband"
args << "--enable-libzimg" if build.with? "zimg"
args << "--disable-indev=qtkit" if build.without? "qtkit"
args << "--enable-libopenh264" if build.with? "openh264"
2014-06-04 14:33:33 +00:00
if build.with? "openjpeg"
args << "--enable-libopenjpeg"
args << "--disable-decoder=jpeg2000"
args << "--extra-cflags=" + `pkg-config --cflags libopenjpeg`.chomp
end
# These librares are GPL-incompatible, and require ffmpeg be built with
# the "--enable-nonfree" flag, which produces unredistributable libraries
if %w[faac fdk-aac openssl].any? { |f| build.with? f }
args << "--enable-nonfree"
end
# A bug in a dispatch header on 10.10, included via CoreFoundation,
# prevents GCC from building VDA support. GCC has no problems on
# 10.9 and earlier.
# See: https://github.com/Homebrew/homebrew/issues/33741
if MacOS.version < :yosemite || ENV.compiler == :clang
args << "--enable-vda"
else
args << "--disable-vda"
end
# For 32-bit compilation under gcc 4.2, see:
# https://trac.macports.org/ticket/20938#comment:22
ENV.append_to_cflags "-mdynamic-no-pic" if Hardware.is_32_bit? && Hardware::CPU.intel? && ENV.compiler == :clang
system "./configure", *args
2011-03-18 17:30:47 +00:00
if MacOS.prefer_64_bit?
2014-06-04 14:33:33 +00:00
inreplace "config.mak" do |s|
shflags = s.get_make_var "SHFLAGS"
if shflags.gsub!(" -Wl,-read_only_relocs,suppress", "")
s.change_make_var! "SHFLAGS", shflags
end
end
end
2014-06-04 14:33:33 +00:00
system "make", "install"
if build.with? "tools"
2014-06-04 14:33:33 +00:00
system "make", "alltools"
bin.install Dir["tools/*"].select { |f| File.executable? f }
end
end
def caveats
if build.without? "faac" then <<-EOS.undent
ffmpeg 3.0 https://github.com/FFmpeg/FFmpeg/releases/tag/n3.0. FFmpeg 3.0 dropped support for several external libraries; relevant to this formula are libvo-aacenv and libquvi. See Changelog (https://github.com/FFmpeg/FFmpeg/blob/n3.0/Changelog#L4-L71) for details. Developments on the AAC encoding front are especially notable. To quote two official announcements: (TL;DR: 1. The native FFmpeg AAC encoder has gone stable, and it has the advantage of being un-license-encumbered; 2. If you are currently using libvo-aacenc or libaacplus, consider switching to aac or libfdk_aac. aac is almost a drop-in replacement for libvo-aacenc; fdk-aac is better than aacplus but you need to learn profiles and options.) December 5th, 2015, The native FFmpeg AAC encoder is now stable! (https://ffmpeg.org/index.html#aac_encoder_stable): After seven years the native FFmpeg AAC encoder has had its experimental flag removed and declared as ready for general use. The encoder is transparent at 128kbps for most samples tested with artifacts only appearing in extreme cases. Subjective quality tests put the encoder to be of equal or greater quality than most of the other encoders available to the public. Licensing has always been an issue with encoding AAC audio as most of the encoders have had a license making FFmpeg unredistributable if compiled with support for them. The fact that there now exists a fully open and truly free AAC encoder integrated directly within the project means a lot to those who wish to use accepted and widespread standards. ... January 30, 2016, Removing support for two external AAC encoders (https://ffmpeg.org/index.html#removing_external_aac_encoders): ... The circumstances for both have changed. After the work spearheaded by Rostislav Pehlivanov and Claudio Freire, the now-stable FFmpeg native AAC encoder is ready to compete with much more mature encoders. The Fraunhofer FDK AAC Codec Library for Android was added in 2012 as the fourth supported external AAC encoder, and the one with the best quality and the most features supported, including HE-AAC and HE-AACv2. Therefore, we have decided that it is time to remove libvo-aacenc and libaacplus. If you are currently using libvo-aacenc, prepare to transition to the native encoder (aac) when updating to the next version of FFmpeg. In most cases it is as simple as merely swapping the encoder name. If you are currently using libaacplus, start using FDK AAC (libfdk_aac) with an appropriate profile option to select the exact AAC profile that fits your needs. In both cases, you will enjoy an audible quality improvement and as well as fewer licensing headaches.
2016-02-15 06:15:32 +00:00
The native FFmpeg AAC encoder has been stable since FFmpeg 3.0. If you
were using libvo-aacenc or libaacplus, both of which have been dropped in
FFmpeg 3.0, please consider switching to the native encoder (-c:a aac),
fdk-aac (-c:a libfdk_aac, ffmpeg needs to be installed with the
--with-fdk-aac option), or faac (-c:a libfaac, ffmpeg needs to be
installed with the --with-faac option).
See the announcement
https://ffmpeg.org/index.html#removing_external_aac_encoders for details,
and https://trac.ffmpeg.org/wiki/Encode/AAC on best practices of encoding
AAC with FFmpeg.
EOS
end
end
test do
# Create an example mp4 file
system "#{bin}/ffmpeg", "-y", "-filter_complex",
"testsrc=rate=1:duration=1", "#{testpath}/video.mp4"
assert (testpath/"video.mp4").exist?
end
end