Mac OS上使用ffmpeg的“血泪”总结

2023-10-26

标题真不是夸张,这几天在整理视频相关的处理流程,为了获得一些性能数据,打算在自己的MacBook Pro 上面装ffmepg,这一折腾4、5天就过去了。有些问题,在解决之后就豁然开朗了,没有解决之前,真的是百思不得其解,中间就好像隔着一层纱一样。现在将这几天的经历记录下来,一是方便自己后面查看,二是希望节省大家的时间。

我的Mac OS版本是macOS Catalina 10.15.1,Xcode版本是11.1,安装了Command Line Tools for Xcode 11 ,处理器是2 GHz 四核Intel Core i7,内存是8 GB 1600 MHz DDR3。

首先需要说明一下,网上有些资料可能是很久之前写的,对应的Mac OS版本也比较早,以前能用的步骤的,现在可能就不行了。下面列举几个在我的机器上面不适用的场景,若有其他人也遇到了,可以参照一下,有时候可以根据命令的执行错误信息去Google或者百度从而找到解决办法,有时候也可能会被带到沟里面去(我就是被带到沟里好几天了):

  • 直接用如下brew命令安装ffmpeg,并用--with-带上若干关联的编码解码库,这样是不行的,若执行则会得到错误信息“invalid option: --with-chromaprint”。
brew install ffmpeg --with-chromaprint --with-fdk-aac --with-fontconfig --with-freetype --with-frei0r --with-game-music-emu --with-libass --with-libbluray --with-libbs2b --with-libcaca --with-libgsm --with-libmodplug --with-librsvg --with-libsoxr --with-libssh --with-libvidstab --with-libvorbis --with-libvpx --with-opencore-amr --with-openh264 --with-openjpeg --with-openssl --with-opus --with-rtmpdump --with-rubberband --with-sdl2 --with-snappy --with-speex --with-tesseract --with-theora --with-tools --with-two-lame --with-wavpack --with-webp --with-x265 --with-xz --with-zeromq --with-zim
  • 用如下命令尝试将input_file_name.mp4视频从mpeg4制式(视频是x264编码,音频是aac编码)转成webm制式(视频是vp9编码,音频是opus编码),是不行的,若执行则会得到错误信息“Unknown decoder 'libx264'”、“Unrecognized option 'y '.”,根据此错误信息去找解决方案同样会被带到沟里面去。
ffmpeg -y  -c:a libfdk_aac -c:v libx264 -i input_file_name.mp4 -c:v libvpx-vp9 -c:a libvorbis output_file_name.webm
ffmpeg -y  -acodec libfdk_aac -vcodec libx264 -i input_file_name.mp4 -c:v libvpx-vp9 -c:a libvorbis output_file_name.webm

官方文档一般会有人去维护,出错或者不兼容的可能性较低,出现问题后,一般首先需要想到去官方文档(MacOS ffmpeg 官方文档)查看解决办法。我是搜了一下网上的参考资料,后面被折腾了好几天,实在没有办法了,又去仔细看了一下官方文档。上面介绍了三种方法,一是通过HomeBrew安装,二是通过编译好的静态库,三是通过ffmpeg源码安装。本文重点将通过HomeBrew的方式进行安装,且经过实践确定是可行的,具体如下:

第一步,安装Homebrew

Mac里面常用的命令行包管理工具,通过如下命令执行安装Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

第二步,安装ffmpeg

执行

brew install ffmpeg

或者执行都可以,唯一区别是下面语句安装的是最新版本。

brew install ffmpeg --HEAD

两者都会检测ffmpeg的依赖包并自动安装上,请耐心等待,可以用ps -ef | grep ffmpeg 看一下最新进展。上面两步都没有问题,好多博客也都这么写的,但是需要看清官方的下面表述“Since v2.0, Homebrew does not offer options for its core formulae anymore. Users who want to build ffmpeg with additional libraries (including non-free ones) need to use so-called taps from third party repositories. These repositories are not maintained by Homebrew”,简单说一下就是“从brew的2.0版本开始,brew不再提供针对ffmepg的options的一键关联安装了,如果需要将options和ffmpeg关联起来的话,需要采用第三方的options仓库”。我的brew版本如下,所以仅仅通过上面两步来安装ffmepg,是关联不了诸如x264,vp9等视频编解码器的。如果有同学也是这种情况,需要注意一下。

Homebrew 2.1.15
Homebrew/homebrew-core (git revision c10ec; last commit 2019-11-02)
Homebrew/homebrew-cask (git revision bd0e9; last commit 2019-11-02)

第三步,选择一个第三方仓库,安装options、并和ffmepg关联起来。

有两个仓库,分别是homebrew-ffmpegvarenc-homebrew-ffmpeg ,我用的是第一个,有兴趣的同学可以用第二个尝试一下。

1)执行

brew tap homebrew-ffmpeg/ffmpeg

2)执行

brew install homebrew-ffmpeg/ffmpeg/ffmpeg

3)执行如下命令,看此仓库支持哪些options。

brew options homebrew-ffmpeg/ffmpeg/ffmpeg

4)根据第3)步得到的options,替换下面命令中的option,然后执行

brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-<option1> --with-<option2> ...

执行如上几个步骤后,就成功的安装好ffmepg及其依赖包,同时将ffmepg和许多编解码库关联起来了。

第四步,实际操作几个视频验证一下

以4K网站上面的一个4K视频puppies-bath-in-4k为例

1、抽帧,每20秒抽一帧,操作耗时在34.87秒左右。

JAMESWHALE-MB2:Downloads james$ ffmpeg -i PUPPIES_BATH_IN_4K_Original_H.264_AAC.mp4 -f image2 -vf fps=fps=1/20 puppies_%d.png
ffmpeg version git-2019-11-01-53c21c2 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-53c21c2_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 60.100 / 58. 60.100
  libavformat    58. 33.100 / 58. 33.100
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'PUPPIES_BATH_IN_4K_Original_H.264_AAC.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2012-09-21T01:14:45.000000Z
  Duration: 00:02:29.63, start: 0.000000, bitrate: 21244 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 4096x2304, 21049 kb/s, 23.98 fps, 24 tbr, 48 tbn, 48 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default)
    Metadata:
      creation_time   : 2012-09-21T01:14:45.000000Z
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'puppies_%d.png':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    encoder         : Lavf58.33.100
    Stream #0:0(und): Video: png, rgb24, 4096x2304, q=2-31, 200 kb/s, 0.05 fps, 0.05 tbn, 0.05 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
      encoder         : Lavc58.60.100 png
frame=    7 fps=0.2 q=-0.0 Lsize=N/A time=00:02:20.00 bitrate=N/A speed=3.68x
video:41191kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

2、调整码率和尺寸,操作耗时在77.43秒左右,文件大小从400MB左右减少到15MB左右,分辨率从4K调整为1280*720,减轻手机等无线设备的带宽和流量压力。

JAMESWHALE-MB2:Downloads james$ ffmpeg -i PUPPIES_BATH_IN_4K_Original_H.264_AAC.mp4 -crf 32 -b 0.5M -minrate 0.5M -maxrate 1M -bufsize 1M -vf scale=1280:720 PUPPIES_BATH_IN_1280_720p.mp4
ffmpeg version git-2019-11-01-53c21c2 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-53c21c2_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 60.100 / 58. 60.100
  libavformat    58. 33.100 / 58. 33.100
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'PUPPIES_BATH_IN_4K_Original_H.264_AAC.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2012-09-21T01:14:45.000000Z
  Duration: 00:02:29.63, start: 0.000000, bitrate: 21244 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 4096x2304, 21049 kb/s, 23.98 fps, 24 tbr, 48 tbn, 48 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default)
    Metadata:
      creation_time   : 2012-09-21T01:14:45.000000Z
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
Please use -b:a or -b:v, -b is ambiguous
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x7f9a43016c00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7f9a43016c00] profile High, level 3.1
[libx264 @ 0x7f9a43016c00] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=32.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=1000 vbv_bufsize=1000 crf_max=0.0 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'PUPPIES_BATH_IN_1280_720p.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    encoder         : Lavf58.33.100
    Stream #0:0(und): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p(progressive), 1280x720, q=-1--1, 500 kb/s, 24 fps, 12288 tbn, 24 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
      encoder         : Lavc58.60.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 1000000/0/500000 buffer size: 1000000 vbv_delay: N/A
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2012-09-21T01:14:45.000000Z
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
      encoder         : Lavc58.60.100 aac
frame= 3591 fps= 48 q=-1.0 Lsize=   14765kB time=00:02:29.60 bitrate= 808.5kbits/s dup=3 drop=0 speed=1.98x
video:12301kB audio:2351kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.772543%
[libx264 @ 0x7f9a43016c00] frame I:32    Avg QP:28.63  size: 17804
[libx264 @ 0x7f9a43016c00] frame P:978   Avg QP:32.61  size:  6742
[libx264 @ 0x7f9a43016c00] frame B:2581  Avg QP:35.31  size:  2105
[libx264 @ 0x7f9a43016c00] consecutive B-frames:  3.5%  1.2%  2.0% 93.2%
[libx264 @ 0x7f9a43016c00] mb I  I16..4: 31.9% 62.0%  6.1%
[libx264 @ 0x7f9a43016c00] mb P  I16..4:  7.1%  9.9%  0.5%  P16..4: 34.3%  4.3%  1.4%  0.0%  0.0%    skip:42.6%
[libx264 @ 0x7f9a43016c00] mb B  I16..4:  0.2%  0.5%  0.0%  B16..8: 25.5%  1.6%  0.1%  direct: 0.4%  skip:71.4%  L0:39.9% L1:58.9% BI: 1.2%
[libx264 @ 0x7f9a43016c00] 8x8 transform intra:58.1% inter:91.0%
[libx264 @ 0x7f9a43016c00] coded y,uvDC,uvAC intra: 23.9% 36.4% 10.0% inter: 3.9% 5.3% 0.2%
[libx264 @ 0x7f9a43016c00] i16 v,h,dc,p: 23% 40%  8% 29%
[libx264 @ 0x7f9a43016c00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 14% 35%  5%  6%  7%  6%  6%  5%
[libx264 @ 0x7f9a43016c00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 20% 23%  6%  7%  7%  6%  5%  3%
[libx264 @ 0x7f9a43016c00] i8c dc,h,v,p: 70% 15% 11%  3%
[libx264 @ 0x7f9a43016c00] Weighted P-Frames: Y:4.2% UV:3.7%
[libx264 @ 0x7f9a43016c00] ref P L0: 60.8% 15.5% 18.1%  5.5%  0.1%
[libx264 @ 0x7f9a43016c00] ref B L0: 91.6%  6.5%  1.9%
[libx264 @ 0x7f9a43016c00] ref B L1: 97.6%  2.4%
[libx264 @ 0x7f9a43016c00] kb/s:673.46
[aac @ 0x7f9a43018400] Qavg: 237.150

3、将mpeg4制式转成webm格式,源音视频编码是不用写的,ffmepg可以自己读取(例如,这里的视频编码是h.264,音频编码是aac),写了之后反而会报Unknown decoder 'libx264'错误。可以指定目标编码,若不指定,ffmepg会根据输出文件名后缀采用合适的音视频编码,例如,这里的输出文件名后缀是.webm, 则制式采用webm格式,视频编码用vp9,音频编码用opus。vp9还真挺厉害,在h.264基础上,又压缩掉了70%(400MB->107MB)。

JAMESWHALE-MB2:Downloads james$ ffmpeg -i PUPPIES_BATH_IN_4K_Original_H.264_AAC.mp4 PUPPIES_BATH_IN_4K_Original_H.264_AAC.webm
ffmpeg version git-2019-11-01-53c21c2 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-53c21c2_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 60.100 / 58. 60.100
  libavformat    58. 33.100 / 58. 33.100
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'PUPPIES_BATH_IN_4K_Original_H.264_AAC.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2012-09-21T01:14:45.000000Z
  Duration: 00:02:29.63, start: 0.000000, bitrate: 21244 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 4096x2304, 21049 kb/s, 23.98 fps, 24 tbr, 48 tbn, 48 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default)
    Metadata:
      creation_time   : 2012-09-21T01:14:45.000000Z
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> vp9 (libvpx-vp9))
  Stream #0:1 -> #0:1 (aac (native) -> opus (libopus))
Press [q] to stop, [?] for help
[libvpx-vp9 @ 0x7fc0ce010600] v1.8.1
[libvpx-vp9 @ 0x7fc0ce010600] Neither bitrate nor constrained quality specified, using default CRF of 32
[libopus @ 0x7fc0ce013c00] No bit rate set. Defaulting to 96000 bps.ate=  -0.0kbits/s speed=N/A
Output #0, webm, to 'PUPPIES_BATH_IN_4K_Original_H.264_AAC.webm':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    encoder         : Lavf58.33.100
    Stream #0:0(und): Video: vp9 (libvpx-vp9), yuv420p(progressive), 4096x2304, q=-1--1, 24 fps, 1k tbn, 24 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
      encoder         : Lavc58.60.100 libvpx-vp9
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    Stream #0:1(und): Audio: opus (libopus), 48000 Hz, stereo, flt, 96 kb/s (default)
    Metadata:
      creation_time   : 2012-09-21T01:14:45.000000Z
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
      encoder         : Lavc58.60.100 libopus
frame= 3588 fps=0.3 q=0.0 Lsize=  104601kB time=00:02:29.61 (这个不是耗时)bitrate=5727.3kbits/s speed=0.0116x
video:102527kB audio:1994kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.076851%

4、将mpeg4制式转成webm制式,原音视频编码仍然从输入文件获取,这次明确指定目标视频编码为vp8,目标音频编码没有明确指定,ffmpeg根据输出文件后缀.webm默认采用opus音频编码。vp8在h.264基础上,又压缩掉了20%左右(15.1MB->12.1MB),操作耗时在599.15秒左右。

JAMESWHALE-MB2:Downloads james$ ffmpeg -i PUPPIES_BATH_IN_1280_720p.mp4  -vcodec vp8 -crf 32 -b 0.5M -minrate 0.5M -maxrate 1M -bufsize 1M PUPPIES_BATH_IN_1280_720p.webm
ffmpeg version git-2019-11-01-53c21c2 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-53c21c2_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 60.100 / 58. 60.100
  libavformat    58. 33.100 / 58. 33.100
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'PUPPIES_BATH_IN_1280_720p.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.33.100
  Duration: 00:02:29.63, start: 0.000000, bitrate: 808 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 673 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
Please use -b:a or -b:v, -b is ambiguous
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> vp8 (libvpx))
  Stream #0:1 -> #0:1 (aac (native) -> opus (libopus))
Press [q] to stop, [?] for help
[libopus @ 0x7fa68c002800] No bit rate set. Defaulting to 96000 bps.
[libvpx @ 0x7fa68c001600] v1.8.1
Output #0, webm, to 'PUPPIES_BATH_IN_1280_720p.webm':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.33.100
    Stream #0:0(und): Video: vp8 (libvpx), yuv420p, 1280x720, q=-1--1, 500 kb/s, 24 fps, 1k tbn, 24 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc58.60.100 libvpx
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 1000000 vbv_delay: N/A
    Stream #0:1(und): Audio: opus (libopus), 48000 Hz, stereo, flt, 96 kb/s (default)
    Metadata:
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
      encoder         : Lavc58.60.100 libopus
frame= 3591 fps=6.0 q=0.0 Lsize=   11812kB time=00:02:29.61 bitrate= 646.7kbits/s speed=0.249x
video:9750kB audio:1984kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.665825%

总结

遇到问题不能怕,即使经过了很多天的折磨,仍然需要保持耐心和清醒的头脑,问题解决之后的成就感是对过程中付出的最大回报。

原文  Mac OS上使用ffmpeg的“血泪”总结 - 知乎 

 

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac OS上使用ffmpeg的“血泪”总结 的相关文章

  • 如何在 PHP 中运行 ffmpeg 命令

    我需要在 PHP 中运行 ffmpeg 命令 但是 php ffmpeg 不再支持最新版本并且已经过时 我可以知道在网络文件中运行 ffmpeg 命令的替代方法吗 PHP Javascript jQuery 我尝试exec and shel
  • FFmpeg - H264 编码器找不到有效设备并且无法配置编码器

    我尝试使用 H264 编码器进行编码 但是当我这样做时 出现以下错误 h264 v4l2m2m 0x55682d2416c0 Could not find a valid device h264 v4l2m2m 0x55682d2416c0
  • C# - 捕获 RTP 流并发送到语音识别

    我正在努力实现的目标 在 C 中捕获 RTP 流 将该流转发到 System Speech SpeechRecognitionEngine 我正在创建一个基于 Linux 的机器人 它将接受麦克风输入 将其发送给 Windows 机器 Wi
  • 消除 ffmpeg 和 image-magic 命令中的慢速因素

    这些命令的基本思想是创建一个比较 比较定义了过去的一张 jpeg 和现在的一张 jpeg 组合起来 例如它们将相互滑动并显示前后图像 e g https media evercam io v1 cameras 1lowe scnoe com
  • 使用 ffmpeg 或 OpenCV 处理原始图像

    看完之后维基百科页面 http en wikipedia org wiki Raw image format原始图像格式 是任何图像的数字负片 为了查看或打印 相机图像传感器的输出具有 进行处理 即转换为照片渲染 场景 然后以标准光栅图形格
  • ffmpeg AVFrame 到 opencv Mat 转换

    我目前正在开发一个使用 ffmpeg 解码接收到的帧的项目 解码后 我想将 AVFrame 转换为 opencv Mat 帧 以便我可以在 imShow 函数上播放它 我拥有的是字节流 我将其读入缓冲区 解码为 AVFrame f fope
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 如何将 MP3 音频文件读入 numpy 数组/将 numpy 数组保存到 MP3?

    有没有办法从 MP3 音频文件中读取 写入 MP3 音频文件numpy具有类似 API 的数组scipy io wavfile read https docs scipy org doc scipy 0 14 0 reference gen
  • FFMPEG波形透明,背景纯色

    我正在尝试使用 ffmpeg 生成波形 我希望背景为纯色 实际波形为透明 以下部分实现了我想要的 除了有黑色背景 我希望能够将其更改为任何颜色 但波形是透明的 我怎样才能用 ffmepg 实现这个目标 ffmpeg i input mp3
  • 转换为 JPEG 时 HEIC 切片损坏

    我在将 HEIC 图像转换为 jpeg 时遇到问题 HEIC 文件是使用运行最新 iOS 公共测试版的 iPhone 拍摄的图像 我正在使用诺基亚提供的库 https github com nokiatech heif 要解析文件并从 HE
  • Node.js - 将数据缓冲到 Ffmpeg

    我使用 Node js 和 Ffmpeg 来创建动画 因为我试图避免第三方 avi mp4 解析器 所以我决定将动画输出为原始 rgb24 数据文件 然后使用一些程序将其转换为 mp4 文件 我发现 Ffmpeg 是免费且开源的 它完全可以
  • 如何使用 ffmpeg 设置默认流

    我有一些 m4v 文件 我想用 ffmpeg 添加字幕 我知道我需要映射流以将它们放入输出文件中 但如何确保此字幕流将是默认流 字幕是 srt 人们似乎说它们与 mp4 容器不兼容 我需要先将字幕转换为什么 另外 各种流的顺序重要吗 视频流
  • 如何在google colab中安装ffmpeg包

    我正在尝试使用 Google Colab 来做一些事情 我特别想用ffmpeg打包到从图像创建视频 https stackoverflow com a 44951066 6890234 但 ffmpeg 似乎工作得不太好 这个 在最后一个块
  • C++ OpenCV 3.4 / FFMPEG 3.4.1 VideoWriter 和 MP4 输出文件格式

    我正在运行 Linux 内核 4 9 35 ti r44 的 ARM BeagleBone X 15 Debian 机器 在我的 C Qt 5 应用程序中 我想将 cv Mat 帧保存为 MP4 格式视频 我安装了 libx264 并从头开
  • 连接 2 个迷你音频文件并循环播放并添加背景音乐

    我需要用循环连接 2 个小音频文件并在单个命令中添加背景音乐 我能够将两个音频文件与背景音乐连接起来 我上面给出的代码正在运行 ffmpeg i 1 mp3 i 2 mp3 i background mp3 filter complex 0
  • ffmpeg h264 问题:在 XP 上“找不到预设文件...”

    我有 XP 因为我不熟悉编译 所以我下载了 ffmpeg 的 win32 静态版本 svn r26251 我想调整 mp4 最初为 1280x720 视频的大小 以获得较小的文件大小 但质量大致相同 我的命令是 ffmpeg i ma mp
  • 为 Android 编译时显示 FFMPEG 错误

    我正在尝试将 ffmpeg 添加到我的 android 项目中 我使用的是 ubuntu 14 04 操作系统 我正在关注此链接 Link https software intel com en us android blogs 2013
  • swscaler 警告:使用了已弃用的像素格式

    我想先对视频帧执行颜色空间转换 然后使用以下代码将其转换为 opengl 纹理 struct SwsContext pSwsCtx sws getCachedContext NULL width height codec gt pix fm
  • PowerShell 脚本 ffmpeg

    作为一名优秀的 Windows 系统管理员 我终于开始学习 PowerShell 话虽这么说 我不知道我在做什么 惊讶 惊讶 我认为远离生产环境 在家里使用 PowerShell 对我来说将是一次很好的学习经历 最近 我开始使用 FFMPE

随机推荐

  • 关于ftp上传文件系统时间差8个小时的时区问题

    2022年5月20日09 14 28 昨天上传代码出现一个奇怪的问题 就是视图缓存一直不更新 一开始以为是解析层waf的缓存不更新 导致waf不更新的原因是因为代码层的生产的视图缓存不更新 导致代码层的缓存不更新的是 就是ftp上传时间和服
  • git php 代码检查,gitlab下对php代码进行检测

    我们都知道 有一个世界上最好的语言 但在实际项目中也要考虑下历史的进程 避免一些错误导致程序无法运行 比如语法上的错误 所以我们要对代码进行检测 实现这个目标需要解决几个问题 什么时候检测代码 并拒绝异常代码的提交 以什么做标准 通过什么工
  • Latex公式太长,换行的两种方式

    latex中公式进行换行 begin equation begin aligned Ttran i j j 1 frac R bd j j 1 ij AR bd j j 1 ij times T ideal tran ij v u in l
  • 2020年总结:互联网思维下的工业软件开发

    2020年的年终总结像往年一样如期而至 今年是个特殊的年份 疫情爆发 全国人民众志成城 支援武汉 把武汉疫情完美控制 接下来经历了一个整年的抗疫生活 见证了一个个门店的倒下 站起 一个个公司申请破产 又一个个公司申请登记注册 这一个年 见证
  • fread函数解析

    fread函数解析 1 size t fread void buffer size t elementsize size t count FILE stream return fread s buffer SIZE MAX elements
  • 微信小程序纯css实现一个弹出的菜单

    1 实现效果 2 实现原理 animation动画 transform属性 rotateZ translate 3 实现代码
  • 必读:学习C语言编程的路线图

    学习C语言编程 可以丰富编程思维的训练和经验 以下是一些学习C语言编程的路线图 设置开发环境 在计算机上安装C编译器 GNU编译器集合 GCC 是一个流行的选择 适用于Windows macOS和Linux等各种操作系统 安装IDE编程环境
  • 数据清洗方法

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1220 1 数据错误 脏数据或错误数据 比如 温度 2003 数据不正确 0 代表真实的0还是代表缺失 数据不一致 2 删除重复值 删除重复
  • Shell脚本——条件语句

    shell脚本 编程条件语句 条件测试 if语句 case分支语句 一 条件测试 1 1 Test命令 1 2 文件测试 1 3整数值比较 1 4字符串比较 1 5逻辑测试 二 if语句 2 1 单分支结构 2 2双分支结构 2 3多分支结
  • Eclipse 语言包下载

    1 登陆http www eclipse org babel downloads php 选择你的eclipse版本 2 找到IDE中文补丁包 INDIGO的地址如下 http download eclipse org technology
  • Maven(六) eclipse 使用Maven deploy命令部署构建到Nexus

    转载于 http blog csdn net jun55xiu article details 43051627 1 应用场景 SYS UTIL 系统工具 项目部署 构建成JAR包 SYS UTIL XXX jar 存储到Nexus私服上
  • spring boot 使用application.properties 进行外部配置

    application properties大家都不陌生 我们在开发的时候 经常使用它来配置一些可以手动修改而且不用编译的变量 这样的作用在于 打成war包或者jar用于生产环境时 我们可以手动修改环境变量而不用再重新编译 spring b
  • python里的pypi是干什么用的_【python工具篇】pip和pypi

    PyPI the Python Package Index The Python Package Index is a repository of software for the Python programming language T
  • HTTP中GET,POST和PUT的区别

    一 HTTP中定义了以下几种请求方法 1 GET 2 POST 3 PUT 4 DELETE 5 HEAD 6 TRACE 7 OPTIONS 二 各个方法介绍 1 GET方法 对这个资源的查操作 2 DELETE方法 对这个资源的删操作
  • 电脑检测不到第二个显示器的解决方法

    一般是因为显示适配器被失效了 右击开始菜单 选择 设备管理器 再选择 显示适配器 这时图标上一般会带上感叹号 右击后选择禁用 再选择启用就能检测到第二个显示器
  • 第一个跑马灯实验

    如何新建一个工程 1 打开工程模板 删除其他不重要的库文件 把main 函数里的内容删除 不用的外设固件库文件可以删掉 节省编译时间 rcc 时钟使能 usart 串口 复用映射 setbits 设置高电平 resetbits 低电平 2
  • 「PAT甲级真题解析」Advanced Level 1006 Sign In and Sign Out

    PAT Advanced Level Practice 1006 Sign In and Sign Out 如果对你有帮助 要点个赞让我知道喔 文章目录 问题分析 完整描述步骤 伪代码描述 完整提交代码 问题分析 题目给出一组学生进入机房的
  • 计量经济学及Stata应用 陈强 第八章自相关习题8.3

    8 3使用数据集gasoline dta估计美国1953 2004年的汽油需求函数 考虑如下回归 其中 被解释变量lgasq为人均汽油消费量的对数 解释变量lincome为人均收入的对数 lgasp为汽油价格指数的对数 lpnc为新车价格指
  • ROS建模仿真(1)-创建机器人模型

    ROS建模仿真 1 创建机器人模型 创建catkin creat pkg功能包 创建机器人描述文件 创建launch文件 创建catkin creat pkg功能包 创建机器人描述文件 创建launch文件 创建catkin creat p
  • Mac OS上使用ffmpeg的“血泪”总结

    标题真不是夸张 这几天在整理视频相关的处理流程 为了获得一些性能数据 打算在自己的MacBook Pro 上面装ffmepg 这一折腾4 5天就过去了 有些问题 在解决之后就豁然开朗了 没有解决之前 真的是百思不得其解 中间就好像隔着一层纱