ffmpeg 在linux正常gcc编译、emcc编译、Mingw编译

源码包

编译选项解释
帮助选项: --help 打印此消息 --quiet 抑制显示信息输出 --list-decoders 显示所有可用的解码器 --list-encoders 显示所有可用的编码器 --list-hwaccels 显示所有可用的硬件加速器 --list-demuxers 显示所有可用的解复用器 --list-muxers 显示所有可用的复用器 --list-parsers 显示所有可用的解析器 --list-protocols 显示所有可用的协议 --list-bsfs 显示所有可用的比特流过滤器 --list-indevs 显示所有可用的输入设备 --list-outdevs 显示所有可用的输出设备 --list-filters 显示所有可用的过滤器 标准选项: --logfile = FILE日志测试并输出到FILE [ffbuild / config.log] --disable-logging不记录配置调试信息 - 如果生成任何配置警告,则-fatal-warnings将失败 --prefix = PREFIX安装在PREFIX [/ usr / local] -bindir = DIR在DIR [PREFIX / bin]中安装二进制文件 -datadir = DIR在DIR中安装数据文件[PREFIX / share / ffmpeg] -docdir = DIR中的DIR安装文档[PREFIX / share / doc / ffmpeg] --libdir = DIR在DIR [PREFIX / lib]中安装库 --shlibdir = DIR在DIR [LIBDIR]中安装共享库 --incdir = DIR安装包含在DIR [PREFIX / include]中 --mandir =在DIR安装手册页[PREFIX / share / man] --pkgconfigdir = DIR在DIR中安装pkg-config文件[LIBDIR / pkgconfig] --enable-rpath使用rpath允许在路径中安装库 不属于动态链接器搜索路径的一部分 链接程序时使用rpath(USE WITH CARE) --install-name-dir =已安装目标的DIR Darwin目录名 许可选项: --enable-gpl允许使用GPL代码,生成的库 和二进制文件将在GPL下[no] --enable-version3升级(L)GPL到版本3 [no] --enable-nonfree允许使用非自由代码,生成的库 和二进制文件将是不可分发的[不] 配置选项: --disable-static不构建静态库[no] --enable-shared构建共享库[no] --enable-small优化尺寸而不是速度 --disable-runtime-cpudetect禁用在运行时检测CPU功能(较小的二进制) --enable-grey启用全灰度支持(较慢的颜色) --disable-swscale-alpha禁用swscale中的alpha通道支持 --disable-all禁用构建组件,库和程序 --disable-autodetect禁用自动检测到的外部库[no] 计划选项: --disable-programs不构建命令行程序 --disable-ffmpeg禁用ffmpeg构建 --disable-ffplay禁用ffplay构建 --disable-ffprobe禁用ffprobe构建 文档选项: --disable-doc不构建文档 --disable-htmlpages不构建HTML文档页面 --disable-manpages不构建man文档页面 --disable-podpages不构建POD文档页面 --disable-txtpages不构建文本文档页面 组件选项: --disable-avdevice禁用libavdevice构建 --disable-avcodec禁用libavcodec构建 --disable-avformat禁用libavformat构建 --disable-swresample禁用libswresample build --disable-swscale禁用libswscale构建 --disable-postproc禁用libpostproc构建 --disable-avfilter禁用libavfilter构建 --enable-avresample启用libavresample build(不建议使用)[no] --disable-pthreads禁用pthreads [autodetect] --disable-w32threads禁用Win32线程[autodetect] --disable-os2threads禁用OS / 2线程[autodetect] --disable-network禁用网络支持[否] --disable-dct禁用DCT代码 --disable-dwt禁用DWT代码 --disable-error-resilience禁用错误恢复代码 --disable-lsp禁用LSP代码 --disable-lzo禁用LZO解码器代码 --disable-mdct禁用MDCT代码 --disable-rdft禁用RDFT代码 --disable-fft禁用FFT代码 --disable-faan禁用浮点AAN(I)DCT代码 --disable-pixelutils禁用libavutil中的pixel utils 个别组件选项: --disable-everything禁用下面列出的所有组件 --disable-encoder = NAME禁用编码器名称 --enable-encoder = NAME启用编码器NAME --disable-encoders禁用所有编码器 --disable-decoder = NAME禁用解码器NAME --enable-decoder = NAME启用解码器NAME --disable-decoders禁用所有解码器 --disable-hwaccel = NAME禁用hwaccel NAME --enable-hwaccel = NAME启用hwaccel NAME --disable-hwaccels禁用所有hwaccel --disable-muxer = NAME禁用muxer NAME --enable-muxer = NAME启用muxer NAME --disable-muxers禁用所有复用器 --disable-demuxer = NAME禁用demuxer NAME --enable-demuxer = NAME启用解复用程序NAME --disable-demuxers禁用所有解复用器 --enable-parser = NAME启用解析器NAME --disable-parser = NAME禁用解析器NAME --disable-parsers禁​​用所有解析器 --enable-bsf = NAME启用比特流过滤器NAME --disable-bsf = NAME禁用比特流过滤器NAME --disable-bsfs禁用所有比特流过滤器 --enable-protocol = NAME启用协议NAME --disable-protocol = NAME禁用协议名称 --disable-protocols禁用所有协议 --enable-indev = NAME启用输入设备NAME --disable-indev = NAME禁用输入设备NAME --disable-indevs禁用输入设备 --enable-outdev = NAME启用输出设备NAME --disable-outdev = NAME禁用输出设备NAME --disable-outdevs禁用输出设备 --disable-devices禁用所有设备 --enable-filter = NAME启用过滤器NAME --disable-filter = NAME禁用过滤器名称 --disable-filters禁用所有过滤器 外部库支持: 使用以下任何一个开关将允许FFmpeg链接到 相应的外部库。所有组件都依赖于该库 如果所有其他依赖项都得到满足而未满足,则将启用 明确禁用。例如。 –enable-libwavpack将启用链接 libwavpack并允许构建libwavpack编码器,除非它是 使用–disable-encoder = libwavpack专门禁用。 请注意,仅自动检测系统库。所有其他外部 必须明确启用库。 另请注意,以下帮助文本描述了库的用途 他们自己并非所有功能都必须由FFmpeg使用。 --disable-alsa禁用ALSA支持[autodetect] --disable-appkit禁用Apple AppKit框架[autodetect] --disable-avfoundation禁用Apple AVFoundation框架[autodetect] --enable-avisynth可以读取AviSynth脚本文件[no] --disable-bzlib disable bzlib [autodetect] --disable-coreimage禁用Apple CoreImage框架[autodetect] --enable-chromaprint启用带色度的音频指纹识别[no] --enable-frei0r启用frei0r视频过滤[no] --enable-gcrypt启用gcrypt,rtmp(t)e支持所需 如果没有使用openssl,librtmp或gmp [no] --enable-gmp启用gmp,rtmp(t)e支持所需 如果没有使用openssl或librtmp [no] --enable-gnutls支持https支持所需的gnutls 如果没有使用openssl或libtls [no] --disable-iconv禁用iconv [autodetect] --enable-jni启用JNI支持[no] --enable-ladspa启用LADSPA音频过滤[否] --enable-libaom通过libaom启用AV1视频编码/解码[no] --enable-libass启用libass字幕渲染, 字幕和屁股过滤所需[no] --enable-libbluray使用libbluray启用BluRay读取[no] --enable-libbs2b启用bs2b DSP库[no] --enable-libcaca使用libcaca启用文本显示[no] --enable-libcelt通过libcelt启用CELT解码[no] --enable-libcdio启用音频CD抓取libcdio [no] --enable-libcodec2使用libcodec2启用codec2 en / decode [no] --enable-libdc1394使用libdc1394启用IIDC-1394 和libraw1394 [no] --enable-libfdk-aac通过libfdk-aac启用AAC de / encoding [no] --enable-libflite通过libflite启用flite(语音合成)支持[no] --enable-libfontconfig启用libfontconfig,对drawtext过滤器很有用[no] --enable-libfreetype启用libfreetype,drawtext过滤器需要[no] --enable-libfribidi启用libfribidi,改进了drawtext过滤器[no] --enable-libgme通过libgme启用游戏音乐Emu [no] --enable-libgsm通过libgsm启用GSM de / encoding [no] --enable-libiec61883通过libiec61883启用iec61883 [no] --enable-libilbc通过libilbc启用iLBC de / encoding [no] --enable-libjack启用JACK音频声音服务器[否] --enable-libkvazaar通过libkvazaar启用HEVC编码[no] --enable-libmodplug通过libmodplug启用ModPlug [no] --enable-libmp3lame通过libmp3lame启用MP3编码[no] --enable-libopencore-amrnb通过libopencore-amrnb启用AMR-NB de / encoding [no] --enable-libopencore-amrwb通过libopencore-amrwb启用AMR-WB解码[no] --enable-libopencv通过libopencv启用视频过滤[no] --enable-libopenh264通过OpenH264启用H.264编码[no] --enable-libopenjpeg通过OpenJPEG启用JPEG 2000 de / encoding [no] --enable-libopenmpt通过libopenmpt启用解码跟踪文件[no] --enable-libopus通过libopus启用Opus de / encoding [no] --enable-libpulse通过libpulse启用Pulseaudio输入[no] --enable-librsvg通过librsvg启用​​SVG光栅化[no] --enable-librubberband启用橡皮带过滤器所需的橡皮带[no] --enable-librtmp通过librtmp [no]启用RTMP [E]支持 --enable-libshine通过libshine启用定点MP3编码[no] --enable-libsmbclient通过libsmbclient启用Samba协议[no] --enable-libsnappy启用Snappy压缩,用于hap编码[no] --enable-libsoxr enable包含libsoxr重采样[no] --enable-libspeex通过libspeex启用Speex de / encoding [no] --enable-libsrt通过libsrt启用Haivision SRT协议[no] --enable-libssh通过libssh启用SFTP协议[no] --enable-libtesseract启用tesseract,ocr过滤器需要[no] --enable-libtheora通过libtheora启用Theora编码[no] --enable-libtls启用了LibreSSL(通过libtls),这是https支持所必需的 如果没有使用openssl或gnutls [no] --enable-libtwolame通过libtwolame启用MP2编码[no] --enable-libv4l2启用libv4l2 / v4l-utils [no] --enable-libvidstab使用vid.stab [no]启用视频稳定 --enable-libvmaf通过libvmaf启用vmaf过滤器[no] --enable-libvo-amrwbenc通过libvo-amrwbenc [no]启用AMR-WB编码 --enable-libvorbis通过libvorbis启用Vorbis en /解码, 本机实现存在[否] --enable-libvpx通过libvpx启用VP8和VP9 de / encoding [no] --enable-libwavpack通过libwavpack启用wavpack编码[no] --enable-libwebp通过libwebp启用WebP编码[no] --enable-libx264通过x264启用H.264编码[no] --enable-libx265通过x265启用HEVC编码[no] --enable-libxavs通过xavs启用AVS编码[no] --enable-libxcb使用XCB启用X11抓取[autodetect] --enable-libxcb-shm启用X11抓取shm通信[autodetect] --enable-libxcb-xfixes启用X11抓取鼠标渲染[autodetect] --enable-libxcb-shape启用X11抓取形状渲染[autodetect] --enable-libxvid通过xvidcore启用Xvid编码, 原生MPEG-4 / Xvid编码器存在[no] --enable-libxml2使用C库libxml2 [no]启用XML解析 --enable-libzimg启用z.lib,zscale过滤器需要[no] --enable-libzmq启用通过libzmq传递的消息[no] --enable-libzvbi通过libzvbi启用图文电视支持[no] --enable-lv2启用LV2音频过滤[否] --disable-lzma disable lzma [autodetect] --enable-decklink启用Blackmagic DeckLink I / O支持[no] --enable-libndi_newtek启用Newteck NDI I / O支持[no] --enable-mediacodec支持Android MediaCodec [no] --enable-libmysofa启用libmysofa,sofalizer过滤器需要[no] --enable-openal启用OpenAL 1.1捕获支持[no] --enable-opencl启用OpenCL处理[no] --enable-opengl启用OpenGL渲染[no] --enable-openssl启用openssl,https支持所需 如果不使用gnutls或libtls [no] --disable-sndio禁用sndio支持[autodetect] --disable-schannel禁用SChannel SSP,需要TLS支持 Windows如果没有使用openssl和gnutls [autodetect] --disable-sdl2禁用sdl2 [autodetect] --disable-securetransport禁用TLS支持所需的安全传输 在OSX上如果没有使用openssl和gnutls [autodetect] --disable-xlib禁用xlib [autodetect] --disable-zlib禁用zlib [autodetect] 以下库提供各种硬件加速功能: --disable-amf禁用AMF视频编码代码[autodetect] --disable-audiotoolbox禁用Apple AudioToolbox代码[autodetect] --enable-cuda-sdk启用需要CUDA SDK的CUDA功能[否] --disable-cuvid禁用Nvidia CUVID支持[autodetect] --disable-d3d11va禁用Microsoft Direct3D 11视频加速代码[autodetect] --disable-dxva2禁用Microsoft DirectX 9视频加速代码[autodetect] --disable-ffnvcodec禁用动态链接的Nvidia代码[autodetect] --enable-libdrm启用DRM代码(Linux)[no] --enable-libmfx通过libmfx [no]启用Intel MediaSDK(AKA快速同步视频)代码 --enable-libnpp启用基于Nvidia Performance Primitives的代码[no] --enable-mmal通过MMAL启用Broadcom多媒体抽象层(Raspberry Pi)[no] --disable-nvdec禁用Nvidia视频解码加速(通过hwaccel)[autodetect] --disable-nvenc禁用Nvidia视频编码代码[autodetect] --enable-omx启用OpenMAX IL代码[no] --enable-omx-rpi为Raspberry Pi启用OpenMAX IL代码[no] --enable-rkmpp启用Rockchip Media Process Platform代码[no] --disable-v4l2-m2m禁用V4L2 mem2mem代码[autodetect] --disable-vaapi禁用视频加速API(主要是Unix / Intel)代码[autodetect] --disable-vdpau禁用Nvidia Video Decode和Presentation API for Unix code [autodetect] --disable-videotoolbox禁用VideoToolbox代码[autodetect] 工具链选项: --arch = ARCH select architecture [] --cpu = CPU选择所需的最小CPU(影响 指令选择,可能会在较旧的CPU上崩溃) --cross-prefix = PREFIX使用PREFIX编译工具[] --progs-suffix = SUFFIX程序名后缀[] --enable-cross-compile假设使用了交叉编译器 --sysroot =交叉构建树的PATH根 --sysinclude =交叉构建系统头的PATH位置 --target-os = OS编译器目标OS [] --target-exec = CMD命令在目标上运行可执行文件 --target-path =在目标上查看构建目录的DIR路径 --target-samples =目标上样本目录的DIR路径 --tempprefix = PATH强制修复dir /前缀而不是mktemp进行检查 --toolchain = NAME根据NAME设置工具默认值 (gcc-asan,clang-asan,gcc-msan,clang-msan, gcc-tsan,clang-tsan,gcc-usan,clang-usan, valgrind-massif,valgrind-memcheck, msvc,icl,gcov,llvm-cov,hardened) --nm = NM使用nm工具NM [nm -g] --ar = AR使用存档工具AR [ar] --as = AS使用汇编程序AS [] --ln_s = LN_S使用符号链接工具LN_S [ln -s -f] --strip = STRIP使用剥离工具STRIP [strip] --windres = WINDRES使用windows资源编译器WINDRES [windres] --x86asmexe = EXE使用nasm兼容的汇编程序EXE [nasm] --cc = CC使用C编译器CC [gcc] --cxx = CXX使用C编译器CXX [g ++] --objcc = OCC使用ObjC编译器OCC [gcc] --dep-cc = DEPCC使用依赖关系生成器DEPCC [gcc] --nvcc = NVCC使用Nvidia CUDA编译器NVCC [nvcc] --ld = LD使用链接器LD [] --pkg-config = PKGCONFIG使用pkg-config工具PKGCONFIG [pkg-config] --pkg-config-flags = FLAGS将附加标志传递给pkgconf [] --ranlib = RANLIB使用ranlib RANLIB [ranlib] --doxygen = DOXYGEN使用DOXYGEN生成API doc [doxygen] --host-cc = HOSTCC使用主机C编译器HOSTCC --host-cflags = HCFLAGS在编译主机时使用HCFLAGS --host-cppflags = HCPPFLAGS在编译主机时使用HCPPFLAGS --host-ld = HOSTLD使用主机链接器HOSTLD --host-ldflags = HLDFLAGS在链接主机时使用HLDFLAGS --host-libs = HLIBS在链接主机时使用libs HLIBS --host-os = OS编译器主机OS [] --extra-cflags = ECFLAGS将ECFLAGS添加到CFLAGS [] --extra-cxxflags = ECFLAGS将ECFLAGS添加到CXXFLAGS [] --extra-objcflags = FLAGS将标志添加到OBJCFLAGS [] --extra-ldflags = ELDFLAGS将ELDFLAGS添加到LDFLAGS [] --extra-ldexeflags = ELDFLAGS将ELDFLAGS添加到LDEXEFLAGS [] --extra-ldsoflags = ELDFLAGS将ELDFLAGS添加到LDSOFLAGS [] --extra-libs = ELIBS add ELIBS [] --extra-version = STRING版本字符串后缀[] --optflags = OPTFLAGS覆盖与优化相关的编译器标志 --nvccflags = NVCCFLAGS覆盖nvcc标志[-gencode arch = compute_30,code = sm_30 -O2] --build-suffix = SUFFIX库名后缀[] --enable-pic构建与位置无关的代码 Thumb指令集的--enable-thumb编译 --enable-lto使用链接时优化 --env =“ENV = override”覆盖环境变量  高级选项(仅限专家): --malloc-prefix = PREFIX前缀malloc和PREFIX的相关名称 --custom-allocator = NAME使用受支持的自定义分配器 --disable-symver禁用符号版本控制 --enable-hardcoded-tables使用硬编码表而不是运行时生成 - 禁用安全比特流阅读器 在bitreaders中禁用缓冲区边界检查 (更快,但可能会崩溃) --sws-max-filter-size = N swscale使用的最大过滤器大小[256] 优化选项(仅限专家): --disable-asm禁用所有程序集优化 --disable-altivec禁用AltiVec优化 --disable-vsx禁用VSX优化 --disable-power8禁用POWER8优化 --disable-amd3dnow禁用3DNow!优化 --disable-amd3dnowext禁用3DNow!扩展优化 --disable-mmx禁用MMX优化 --disable-mmxext禁用MMXEXT优化 --disable-sse禁用SSE优化 --disable-sse2禁用SSE2优化 --disable-sse3禁用SSE3优化 --disable-ssse3禁用SSSE3优化 --disable-sse4禁用SSE4优化 --disable-sse42禁用SSE4.2优化 --disable-avx禁用AVX优化 --disable-xop禁用XOP优化 --disable-fma3禁用FMA3优化 --disable-fma4禁用FMA4优化 --disable-avx2禁用AVX2优化 --disable-avx512禁用AVX-512优化 --disable-aesni禁用AESNI优化 --disable-armv5te禁用armv5te优化 --disable-armv6禁用armv6优化 --disable-armv6t2禁用armv6t2优化 --disable-vfp禁用VFP优化 --disable-neon禁用NEON优化 --disable-inline-asm禁用内联汇编 --disable-x86asm禁用独立x86程序集 --disable-mipsdsp禁用MIPS DSP ASE R1优化 --disable-mipsdspr2禁用MIPS DSP ASE R2优化 --disable-msa禁用MSA优化 --disable-mipsfpu禁用浮点MIPS优化 --disable-mmi禁用龙芯SIMD优化 --disable-fast-unaligned认为未对齐的访问速度很慢 开发人员选项(在处理FFmpeg时很有用): --disable-debug禁用调试符号 --enable-debug = LEVEL设置调试级别[] --disable-optimizations禁用编译器优化 --enable-extra-warnings可以启用更多编译器警告 --disable-stripping禁用剥离可执行文件和共享库 --assert-level = 0级(默认),12,断言测试量, 2导致运行时减速。 --enable-memory-poisoning fill heap未初始化的已分配空间和任意数据 --valgrind = VALGRIND通过valgrind运行“make fate”测试来检测内存 泄漏和错误,使用指定的valgrind二进制文件。 不能与--target-exec结合使用 --enable-ftrapv陷阱算术溢出 --samples = FATE的测试样本的PATH位置,如果没有设置使用 make调用时的$ FATE_SAMPLES。 --enable-neon-clobber-test检查NEON寄存器用于破坏(应该是 仅用于调试目的) --enable-xmm-clobber-test检查XMM注册用于clobbering(仅限Win64; 应该只用于调试目的) --enable-random随机启用/禁用组件 --disable随机 --enable-random = LIST随机启用/禁用特定组件或 --disable-random = LIST组件组。 LIST是以逗号分隔的列表 NAME是组件的NAME [:PROB]条目 (组)和PROB相关的概率 NAME(默认为0.5)。 --random-seed = --enable / disable-random的VALUE种子值 --disable-valgrind-backtrace不会在Valgrind下打印回溯 (仅适用于--disable-optimizations构建) --enable-osfuzz启用构建模糊工具 --libfuzzer = libfuzzer的路径 --ignore-tests = TESTS以逗号分隔的列表(没有“fate-”前缀 在名称中)的结果被忽略的测试 --enable-linux-perf启用Linux性能监视器API 注意:目标文件是在启动configure的位置构建的

 

正常gcc编译:

  1. 安装依赖文件:sudo apt install yasm pkg-config libsdl2-dev libx264-dev libx265-dev libfdk-aac-dev // 正常gcc需要使用这些编码器,就这样直接 apt 安装
  2. 编译配置 & 编译:./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-libx264 --enable-libx265 --enable-gpl --enable-libfdk-aac --enable-nonfree  ->  make  ->  make install
    1. 解释:./configure --help即可得知所有的选项。--enable-gplgpl是一种协议这样就允许使用GPL代码,生成的库和二进制文件将使用GPL许可 、--enable-nonfree 允许使用非自由代码,生成的库和二进制文件将不可再分发
  3. 可执行文件和其需要的库的配置:编译目录终端直接 PATH="/usr/local/ffmpeg/bin:$PATH"  ->  /etc/ld.so.conf 添加 "/usr/local/ffmpeg/lib"  (不明白参考 环境变量

 

emcc编译:

安装emcc编译器
 git clone https://github.com/emscripten-core/emsdk.git  // 这里的源换成默认的反而还快一点 cd emsdk git pull ./emsdk install latest //这一步时间有点久 ./emsdk activate latest source ./emsdk_env.sh emcc -v // 有信息表示激活成功,可以使用
fxWasmConfigure.sh
 echo 'in fx-config.sh' #read -p '开始配置按1: ' n #if [ $n -ne 1 ];then #exit #fi : ' 记录 emconfigure ./configure --cc="emcc" --cxx="em++" --ar="emar" --ranlib="emranlib" \ --prefix=$(pwd)/../build \ --enable-cross-compile \ --target-os=none \ --arch=x86_32 \ --cpu=generic \ --enable-gpl \ --enable-version3 \ --enable-shared --enable-libx264 --enable-libx265 --enable-gpl --enable-libfdk-aac --enable-nonfree \ 1. 以上如果是正常gcc编译(./configure --prefix=.....)没问题, emcc编译有问题提示没有libfdk-aac "emcc -I/usr/local/include/fdk-aac -L/usr/local/lib/" # 这样还是有问题,直接提示编译失败 emconfigure ./configure CC="emcc" CXX="em++" AR="emar" RANLIB="emranlib" --prefix=$(pwd)/build # 然后用emcc重新编译fdk 然后编译: --extra-cflags="-I/home/fx/Downloads/fdk-aac-2.0.2/build/include" \ --extra-cxxflags="-I/home/fx/Downloads/fdk-aac-2.0.2/build/include/" \ --extra-ldflags="-L/home/fx/Downloads/fdk-aac-2.0.2/build/lib/" 2. 现在提示x264找到不到了,所以开始emcc编译x264 ARGS=( --host=i686-gnu # use i686 linux --enable-static # enable building static library --disable-cli # disable cli tools --disable-asm # disable asm optimization --extra-cflags="-s USE_PTHREADS=1" # pass this flags for using pthreads ) emconfigure ./configure "${ARGS[@]}" --prefix="`pwd`/build" emmake make -j4 emmake make install 然后编译(这里还是有问题): --extra-cflags="-I/home/fx/Downloads/fdk-aac-2.0.2/build/include -I/home/fx/Downloads/x264/include" \ --extra-cxxflags="-I/home/fx/Downloads/fdk-aac-2.0.2/build/include/ -I/home/fx/Downloads/x264/include" \ --extra-ldflags="-L/home/fx/Downloads/fdk-aac-2.0.2/build/lib/ -L/home/fx/Downloads/x264/lib" 其它记录: 在 .bashrc: #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/ #export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig #export PATH=$PATH:/local/:/ts #export INCLUDE_PATH=/usr/local/include/fdk-aac 直接打命令: export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 查看是否生效: echo $PKG_CONFIG_PATH 报错: --enable-decoder=hevc_qsv \ # 警告:已禁用hevc_qsv_edecoder,因为某些选定的依赖项不满足:hevc_mp4oannexb_bsf qsvdec --enable-decoder=h264_qsv \# 警告:已禁用h264_qsv_edecoder,因为某些选定的依赖项不满足:h264_mp4toannex_bsf qsvdec 部分解释: --disable-sdl2 \ # 三方库 --disable-avdevice \ # 设备 --disable-avformat \ # 格式 --disable-avfilter \ # 滤镜 --disable-decoders \ # 解码器 --disable-encoders \ # 编码器 --disable-hwaccels \ # 硬件加速 --disable-demuxers \ # 解封装 --disable-muxers \ # 封装 --disable-parsers \ # 解析器 --disable-protocols \ # 协议 --disable-bsfs \ # bit stream filter,码流转换 --disable-indevs \ # 输入设备 --disable-outdevs \ #输出设备 --disable-filters \ # 滤镜 --enable-asm \ #允许汇编,指令优化 支持硬解码 ,打开make失败 --enable-swresample #libswresample 库是用于音频重采样,格式转换 ' : ' 可用 wasm 有11M emconfigure ./configure --cc="emcc" --cxx="em++" --ar="emar" --ranlib="emranlib" \ --prefix=$(pwd)/fxWasmBuild \ --enable-cross-compile \ --target-os=none \ --arch=x86_64 \ --cpu=generic \ --enable-gpl \ --enable-version3 \ --disable-swresample \ --enable-postproc \ --disable-logging \ --disable-asm \ --disable-doc \ --disable-ffprobe \ --disable-ffplay \ --enable-network \ --enable-debug \ --disable-iconv \ --disable-sdl2 \ --enable-avdevice \ --enable-avformat \ --disable-avfilter \ --enable-decoders \ --enable-encoders \ --enable-hwaccels \ --enable-demuxers \ --enable-muxers \ --enable-parsers \ --enable-protocols \ --enable-indevs \ --enable-outdevs \ --enable-filters ' # --arch=x86_32 用ffmpeg 5.0 emconfigure ./configure --cc="emcc" --cxx="em++" --ar="emar" --ranlib="emranlib" \ --prefix=$(pwd)/fxWasmBuild \ --enable-cross-compile \ --target-os=none \ --arch=x86_32 \ --cpu=generic \ --enable-gpl \ --enable-version3 \ --enable-swresample \ --disable-postproc \ --disable-logging \ --disable-everything \ --disable-programs \ --disable-asm \ --disable-doc \ --disable-network \ --disable-debug \ --disable-iconv \ --disable-sdl2 \ --enable-avdevice \ --enable-avformat \ --disable-avfilter \ --disable-decoders \ --disable-encoders \ --disable-hwaccels \ --enable-demuxers \ --disable-muxers \ --disable-parsers \ --disable-protocols \ --disable-indevs \ --disable-outdevs \ --disable-filters \ --enable-decoder=hevc \ --enable-parser=hevc \ --enable-decoder=h264 \ --enable-parser=h264 \ --enable-parser=aac \ --enable-decoder=aac # --enable-decoder=hevc \ # --enable-parser=hevc \ # --enable-parser=h264 \ # --enable-decoder=h264 \ # --enable-parser=aac \ # --enable-decoder=aac \ # --enable-protocol=file \ # --enable-demuxer=aac \ # --enable-demuxer=rtsp echo 'out fx-config.sh'
fxEmcc.sh
 # ================================ 1 h265裸流测试 export TOTAL_MEMORY=67108864 # 167772160 export EXPORTED_FUNCTIONS="[ \ '_ffmpeg_init','_ffmpeg_probe','_ffmpeg_decode', '_ffmpeg_free', \ '_get_width','_get_height',\ '_malloc','_free' \ ]" echo "Running Emscripten..." # 入口文件+3个依赖库文件 lib/libswscale.a lib/libavformat.a lib/libavdevice.a emcc ts.c lib/libavcodec.a lib/libavutil.a lib/libswscale.a lib/libavformat.a lib/libavdevice.a lib/libswresample.a \ -O2 \ -I "include" \ -s WASM=1 \ -s ASSERTIONS=1 \ -s LLD_REPORT_UNDEFINED \ -s NO_EXIT_RUNTIME=1 \ -s DISABLE_EXCEPTION_CATCHING=1 \ -s TOTAL_MEMORY=${TOTAL_MEMORY} \ -s EXPORTED_FUNCTIONS="${EXPORTED_FUNCTIONS}" \ -s EXTRA_EXPORTED_RUNTIME_METHODS="['addFunction', 'removeFunction']" \ -s RESERVED_FUNCTION_POINTERS=14 \ -s FORCE_FILESYSTEM=1 \ -o ts.js # '_init_decoder', \ # '_decode_buffer', \ # '_ts',\ # '_malloc',\ # '_free' # ================================ 2 网上的代码测试 # emcc ts.c lib/libavformat.a lib/libavcodec.a lib/libswresample.a lib/libavutil.a \ # -I "include" \ # -s EXPORTED_FUNCTIONS="['_malloc','_free','_ffmpeg_init','_ffmpeg_decode','_ffmpeg_free','_get_width','_get_height']" \ # -s EXTRA_EXPORTED_RUNTIME_METHODS="['addFunction', 'removeFunction']" \ # -s WASM=1 \ # -s ASSERTIONS=0 \ # -s TOTAL_MEMORY=167772160 \ # -s ALLOW_MEMORY_GROWTH=1 \ # -o ts.js #-s EXPORTED_FUNCTIONS="['_malloc','_free','UTF8ToString','_initDecoder','_write_file','_print_version','_get_FileSize','_read_file','_GetVideoFrame','_GetVideoWidth','_GetVideoDuration','_GetVideoHeight','_DeleteMemory']" \ # ================================ 3 MP4测试 # export TOTAL_MEMORY=67108864 # 167772160 # export EXPORTED_FUNCTIONS="[ \ # '_ffmpeg_init', \ # '_ffmpeg_decode', \ # '_ffmpeg_free', \ # '_malloc',\ # '_free' # ]" # echo "Running Emscripten..." # # 入口文件+3个依赖库文件 lib/libswscale.a lib/libavformat.a lib/libavdevice.a # emcc ts.c lib/libavcodec.a lib/libavutil.a lib/libswscale.a lib/libavformat.a lib/libavdevice.a lib/libswresample.a \ # -O2 \ # -I "include" \ # -s WASM=1 \ # -s ASSERTIONS=1 \ # -s LLD_REPORT_UNDEFINED \ # -s NO_EXIT_RUNTIME=1 \ # -s DISABLE_EXCEPTION_CATCHING=1 \ # -s TOTAL_MEMORY=${TOTAL_MEMORY} \ # -s EXPORTED_FUNCTIONS="${EXPORTED_FUNCTIONS}" \ # -s EXTRA_EXPORTED_RUNTIME_METHODS="['addFunction', 'removeFunction']" \ # -s RESERVED_FUNCTION_POINTERS=14 \ # -s FORCE_FILESYSTEM=1 \ # -s ALLOW_MEMORY_GROWTH \ # -o ts.js # -s ALLOW_MEMORY_GROWTH \ # 使用允许在运行时增加内存大小

 

Mingw编译

安装编译器
 sudo apt install mingw-w64-x86-64-dev mingw-w64 -y
fxMingwConfigure.sh
 #sudo apt install mingw-w64-x86-64-dev mingw-w64 -y # y 确定,下载不用按 yes 之类 # --cross-prefix=i686-w32-mingw32 ./configure --arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- \ --disable-x86asm \ --enable-shared \ --prefix=$(pwd)/fxMingwBuild # --disable-x86asm. asm是汇编编译器, 因为ffmpeg中为了提高效率用到了汇编指令

 


__EOF__

本文作者封兴旺
本文链接https://www.cnblogs.com/fxw1/p/17571468.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   封兴旺  阅读(396)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!

联系方式: 18274305123(微信同号)

点击右上角即可分享
微信分享提示