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
相关文章:
FFNPEG编译脚本
下面是一个ffmpeg编译脚本: #!/bin/bash set -eu -o pipefail set eu o pipefailFFMPEG_TAGn4.5-dev build_path$1 git_repo"https://github.com/FFmpeg/FFmpeg.git" cache_tool"" sysroot"" c_compiler"gcc" cxx_compile…...
Python期末复习题库(下)——“Python”
小雅兰期末加油冲冲冲!!! 1. (单选题)下列关于文件打开模式的说法,错误的是( C )。 A. r代表以只读方式打开文件 B. w代表以只写方式打开文件 C. a代表以二进制形式打开文件 D. 模式中使用时,文件可读可写 2. (单选题)下列选项中,以追加…...
tauri中使用rust调用动态链接库例子(使用libloading库和libc库)
前言 当前采用桌面端框架位tauri,现在需要调用读卡器等硬件设备,硬件厂商提供了32位的动态链接库,现在记录例子,需要注意的点是使用libloading库和libc库, [package] name "yyt-device-rust" version &q…...
Leetcode—739.每日温度【中等】
2023每日刷题(四十二) Leetcode—739.每日温度 单调栈实现思想 从右到左实现代码 class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n temperatures.size();stack<int> st;vector<i…...
毕业设计单片机可以用万能板吗?
毕业设计单片机可以用万能板吗? 可以是可以,就是焊接起来比较麻烦,特别是有好几个重复连线点的时候,检测起来就不那么容易了,而且布线看起来乱糟糟的,如果后期一不小心把线弄断了,查起来就更麻烦了&#x…...
spring boot整合Jasypt实现配置加密
文章目录 目录 文章目录 前言 一、Jasypt是什么? 二、使用步骤 1.引入 2.测试使用 3.结果 总结 前言 一、Jasypt是什么? Jasypt(Java Simplified Encryption)是一个Java库,提供了一种简单的加密解密方式,…...
java学校高校运动会报名信息管理系统springboot+jsp
课题研究方案: 结合用户的使用需求,本系统采用运用较为广泛的Java语言,springboot框架,HTML语言等关键技术,并在idea开发平台上设计与研发创业学院运动会管理系统。同时,使用MySQL数据库,设计实…...
Java(七)(Lambda表达式,正则表达式,集合(Collection,Collection的遍历方式))
目录 Lambda表达式 省略写法(要看懂) 正则表达式 语法 案例 正则表达式的搜索替换和分割内容 集合进阶 集合体系结构 Collection Collection的遍历方式 迭代器 增强for循环 Lambda表达式遍历Collection List集合 ArrayList LinkedList 哈希值 HashSet底层原理 …...
华为OD机试 - 二叉树计算(Java JS Python C)
目录 题目描述 输入描述 输出描述 用例 题目解析 JS算法源码 Java算法源码...
鸿蒙(HarmonyOS)应用开发——基础组件
组件 组件化是一种将复杂的前端应用程序分解成小的、独立的部分的方法。这些部分被称为组件,它们可以重复使用,可以与其他组件组合使用以创建更复杂的组件,并且它们有自己的生命周期和状态。 组件化的目的是提高开发效率和代码重用率&#…...
Vue3的项目创建到启动
Vue3的项目创建 检查node版本创建 npm init vuelatest 安装依赖 项目启动 启动成功...
开关电源基础而又硬核的知识
1.什么是Power Supply? Power Supply是一种提供电力能源的设备,它可以将一种电力能源形式转换成另外一种电力能源形式,并能对其进行控制和调节。 根据转换的形式分类:AC/DC、DC/DC、DC/AC、AC/AC 根据转换的方法分类:线性电源、…...
LightDB23.4 支持转换sql中中文空格和逗号为英文空格和逗号
功能介绍 在Lightdb数据库兼容Oracle的语法时,发现Oracle支持sql语句中使用中文空格和中文逗号,为了方便用户迁移到Lightdb,在Lightdb23.4版本中支持了转换中文空格和逗号的功能。该功能由GUC参数lightdb_convert_chinese_char来控制开关&am…...
EM@常见平面曲线的方程的不同表示方式
文章目录 abstract常见曲线的不同形式小结:一览表分析圆锥曲线的极坐标方程非标准位置的圆锥曲线参数方程应用比较 refs abstract 常见平面曲线的方程的不同表示方式 常见曲线的不同形式 下面以平面曲线为对象讨论参数方程通常是对普通方程的补充和增强,曲线的普通方程(直角…...
element使用小结
1、tabel表头文字自定义效果(换行,不同颜色) 换行: // 方法一 <el-table-columnprop"otherCost":label"本期累计\n(元)"> // 通过:label添加\n </el-table-column>.xx .cell {white-space: pre-…...
自动驾驶DCLC 功能规范
目录 1 概述Summary....................................................................................................... 4 1.1 目的Purpose....................................................................................................... 4 1.2 范围Ran…...
LabVIEW中将SMU信号连接到PXI背板触发线
LabVIEW中将SMU信号连接到PXI背板触发线 本文介绍如何将信号从PXI(e)SMU卡路由到PXI(e)机箱上的背板触发线。该过程涉及使用NI-DCPowerVI将SMU信号导出到PXI_TRIG线上。 在继续操作之前,请确保在开发PC上安装了兼容版…...
[蓝桥杯习题]———位运算、判断二进制1个数
⭐Hello!这里是欧_aita的博客。 ⭐今日语录:行动胜过一切。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法(内含蓝桥杯习题) MySQL数据库 位运算 位运算位运算的定义简单运用 实战刷题题目思路代码实现声…...
3DCAT为华东师大设计学院打造元宇宙数字虚拟学院
6月11日,华东师范大学设计学院在chi K11美术馆举办了一场别开生面的 2023 年本科毕业设计暨项目实践教学现场演示展。其中,元宇宙数字虚拟学院(一期)的现场发布会引起了现场震撼,吸引了众多观众的目光和参与。 该元宇宙…...
AIGC 3D即将爆发,混合显示成为产业数字化的生产力平台
2023年,大语言模型与生成式AI浪潮席卷全球,以文字和2D图像生成为代表的AIGC正在全面刷新产业数字化。而容易为市场所忽略的是,3D图像生成正在成为下一个AIGC风口,AIGC 3D宇宙即将爆发。所谓AIGC 3D宇宙,即由文本生成3D…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
