当前位置: 首页 > news >正文

FFNPEG编译脚本

下面是一个ffmpeg编译脚本:

#!/bin/bash
set -eu -o pipefail
set +eu +o pipefailFFMPEG_TAG=n4.5-dev
build_path=$1
git_repo="https://github.com/FFmpeg/FFmpeg.git"
cache_tool=""
sysroot=""
c_compiler="gcc"
cxx_compiler="g++"
ffmpeg_dir=""
build_only=false
parallel="-j$(nproc)"usage="Usage: $0 [FFMPEG_TAG [build_path [git_repo [cache_tool]]]] [Options]Options:FFMPEG_TAG          FFMPEG git tag. (default $FFMPEG_TAG)build_path          Target folder to build. (default \$(pwd))git_repo            Link of FFmpeg.git. (default $git_repo)[-c ]cache_tool     ccache or sccache-S sysroot          sysroot-C c-compiler       c compiler-X cxx-compier      cxx compiler-F ECFLAGS          add ECFLAGS to CFLAGS []-s ffmpeg_dir       ffmpeg_dir cloned.-j parallel         make -j parallel default is \$(nproc)-b                  build only
exp:1. $0 $FFMPEG_TAG \$(pwd) $git_repo ccache2. $0 $FFMPEG_TAG -c ccache
"for _ff in FFMPEG_TAG build_path git_repo cache_tool; doif [ "${1::1}" = "-" ]; thenbreakelseeval $_ff="$1"shiftfi
donewhile getopts ':hc:C:X:S:bs:j:' opt; docase "$opt" inb)build_only=true;;c)cache_tool="$OPTARG ";;C)c_compiler="$OPTARG";;X)cxx_compiler="$OPTARG";;S)sysroot="--sysroot=$OPTARG";;s)ffmpeg_dir=$(realpath $OPTARG);;j)if [ "$OPTARG" -eq "$OPTARG" ]; thenparallel="-j $OPTARG"elseecho "$OPTARG should be a number, use '$parallel' by default"fi;;? | h)echo "$usage"exit 1;;esac
donesrc_path=$(dirname $(readlink -f $0))
echo "src path: ${src_path}"
echo "build path: ${build_path}"
echo "ffmpeg path: ${ffmpeg_dir}"if [ -z $ffmpeg_dir ]; thenecho "delete old FFmpeg files"rm -rf ${build_path}/FFmpeg-${FFMPEG_TAG}rm -rf ${build_path}/ffmpeg_gcuecho "download FFmpeg-${FFMPEG_TAG}"git clone -b ${FFMPEG_TAG} $git_repo ${build_path}/FFmpeg-${FFMPEG_TAG}ffmpeg_dir=${build_path}/FFmpeg-${FFMPEG_TAG}
elif ! [ -d $ffmpeg_dir ]; thenecho "FFmpeg need to be cloned to $ffmpeg_dir"exit 1
fiecho "copy FFmpeg GCU Plugin files info FFmpeg source tree"
cd $ffmpeg_dir
cp ${src_path}/src/configure ${ffmpeg_dir}/
cp ${src_path}/src/libavformat/* ${ffmpeg_dir}/libavformat/
cp ${src_path}/src/libavcodec/* ${ffmpeg_dir}/libavcodec/
cp ${src_path}/src/libavutil/* ${ffmpeg_dir}/libavutil/
cp ${src_path}/src/examples/* ${ffmpeg_dir}/doc/examples/echo "configure FFmpeg"
./configure \--prefix=${build_path}/ffmpeg_gcu \--extra-cflags="-g" \--extra-ldflags="-fuse-ld=gold" \--extra-ldflags="-m64 -lefrt -lefdrv -ltopsrt -ltopscodec -ldl -lpthread" \--disable-stripping \--disable-x86asm \--enable-swscale \--disable-decoders \--disable-optimizations \--enable-topscodec \--enable-decoder=vc1 \--enable-decoder=av1 \--enable-decoder=h264 \--enable-decoder=hevc \--enable-decoder=vp8 \--enable-decoder=vp9 \--enable-decoder=mpeg4 \--enable-decoder=mpeg2video \--enable-decoder=mjpeg \--enable-decoder=h264_topscodec \--enable-decoder=hevc_topscodec \--enable-decoder=mpeg2_topscodec \--enable-decoder=mpeg4_topscodec \--enable-decoder=h263_topscodec \--enable-decoder=vc1_topscodec \--enable-decoder=vp8_topscodec \--enable-decoder=vp9_topscodec \--enable-decoder=avs_topscodec \--enable-decoder=avs2_topscodec \--enable-decoder=mjpeg_topscodec \--enable-decoder=av1_topscodec \--cc="${cache_tool}$c_compiler" \--cxx="${cache_tool}$cxx_compiler" \$sysroot \--enable-cross-compile \--disable-static \--enable-sharedif [ $? -ne 0 ]; thenecho "configure failed"exit 1
fimake cleanecho "make"
make $parallel
if [ $? -ne 0 ]; thenecho "make failed"exit 1
fiecho "make examples"
make examples -j
if [ $? -ne 0 ]; thenecho "make examples failed"exit 1
fiif $build_only; thenexit 0
fiecho "make install"
make install
if [ $? -ne 0 ]; thenecho "make install failed"exit 1
ficp ${ffmpeg_dir}/doc/examples/hw_decode_tops  ${build_path}/ffmpeg_gcu/bin
cp ${ffmpeg_dir}/doc/examples/decode_tops     ${build_path}/ffmpeg_gcu/bin
http://www.lryc.cn/news/249469.html

相关文章:

  • Python期末复习题库(下)——“Python”
  • tauri中使用rust调用动态链接库例子(使用libloading库和libc库)
  • Leetcode—739.每日温度【中等】
  • 毕业设计单片机可以用万能板吗?
  • spring boot整合Jasypt实现配置加密
  • java学校高校运动会报名信息管理系统springboot+jsp
  • Java(七)(Lambda表达式,正则表达式,集合(Collection,Collection的遍历方式))
  • 华为OD机试 - 二叉树计算(Java JS Python C)
  • 鸿蒙(HarmonyOS)应用开发——基础组件
  • Vue3的项目创建到启动
  • 开关电源基础而又硬核的知识
  • LightDB23.4 支持转换sql中中文空格和逗号为英文空格和逗号
  • EM@常见平面曲线的方程的不同表示方式
  • element使用小结
  • 自动驾驶DCLC 功能规范
  • LabVIEW中将SMU信号连接到PXI背板触发线
  • [蓝桥杯习题]———位运算、判断二进制1个数
  • 3DCAT为华东师大设计学院打造元宇宙数字虚拟学院
  • AIGC 3D即将爆发,混合显示成为产业数字化的生产力平台
  • 时间序列预测实战(二十一)PyTorch实现TCN卷积进行时间序列预测(专为新手编写的自研架构)
  • 探索计算机视觉:深度学习与图像识别的融合
  • 屏蔽WordPress评论中长URL地址方法
  • 【教程】 一文部署配置并入门 Redis
  • 数据被锁住了?如何应对.mkp病毒的攻击
  • 【Shell】Shell基础学习
  • python文件读取
  • 第16关 革新云计算:如何利用弹性容器与托管K8S实现极速服务POD扩缩容
  • 算法通关村第十二关|黄金挑战|最长公共前缀字符串压缩
  • 池式组件 ----- Mysql连接池的原理实现
  • 1.自动化运维工具Ansible的安装