ffmpeg+xvid+x264交叉编译全过程

i.MX6 交叉编译zlib、yasm、xvidcore、libpng、x264、jpegsrc、ffmpeg 环境: PC操作系统:Ubuntu 16.04 LTS OpenCV 3.4.1 编译器:arm-poky-linux-gnueabi-gcc 4.9.1 CMake版本:3.13.2 编译的依赖库: zlib-1.2.11, http://www.zlib.net/zlib-1.2.11.tar.gz yasm-1.3.0, http://www.tortall.net/projects/... 阅读详情
1.xvid 编译:
下载 xvid 加压并进入 build->generic
输入 ./configure --host=arm-linux --prefix=/usr/local/arm/3.4.1/arm-linux/(很重要,否则在编译ffmpeg 的时候找不到 xvid , x264 库)
make
(configure时正常通过,但编译的时候通不过并返回错误如下
cc1: error: unrecognized command line option "-freduce-all-gives"

         查阅gcc手册发现 -freduce-all-gives选项是gcc用于优化的选项,其功能是Strength reduce all loop general induction variables,译为“强力精简所有循环通用归纳变量”。可能是由于高版本的gcc把这条优化选项去掉了,我使用低版本交叉编译工具时没有报过这个错。那么这样说来就是在configure生成makefile的过程中有地方定义了这个选项而导致make的失败。将含有这个选项的代码注释掉即可

)
成功后进入 example 文件夹
输入
arm-linux-gcc -o xvid_encraw xvid_encraw.c  -lc -lm -I../src/ -L../build/generic/=build -lxvidcore
即可生成 xvid_encraw
2.x264
    最新的版本(我最开始用的是 20090715 这个)已经有 cross-compile 的支持了,移植应该还是很顺利的。但是这个版本的 win 下编译不通过,问题在网上找了一下,没有解决。后来退而求其次,选择了一个 20060805 的版本,这个版本在网上找到了 win 下 vc6 可以编译通过的版本,同时也可以在 x264 的官方 ftp 上找到 linux 下可以编译的版本。最后决定使用这个版本。这样可以方便一些在 win 下的交互调试。 
  
注意,这里要提醒一下,几年之内, x264 的变化还是很大的。总之,在需要两个平台交叉调试的时候,看来一个相同的版本是非常有必要的。否则,可能会发生这种情况:程序在 win 下好用,在 linux 下就不好用了,然后你一边用 vs ,一边用 gdb ,终于找到了不同的地方,发现 x264 的一个标准 API 对同一个参数的赋值是完全不一样的 …… (比如我就发现我使用的两个版本的 x264_param_init() 函数对 param.i_bframe 赋值是不同的,导致我的一个程序在 win 下是好的, linux 下就是坏的) 
  
新版本的移植我不说了,大概说一下旧版本的移植。 
  
旧的是没有 --disable-asm 和 --cross-compile 这两个 configure 的支持的(前者是对 x86 的汇编优化,交叉编译的时候当然不要的,后者是交叉编译环境设置)。其实和我之前的移植过程差不多,这里写个步骤: 
  
0. 环境 
  

OS:ubuntu 9.04 
Version:x264-snapshot-20060805-2245.tar.bz2 
  
1. 配置 
  

./configure --prefix=/usr/local/arm/3.4.1/arm-linux/  --enable-shared --enable-debug 
  
我这里打开了动态链接和 debug 。前者可以生成 libx264.so ,后者可以在你调程序用 gdb 的时候 step into 库函数里。 
2. 修改配置参数 
  
修改 config.mak : 
prefix=/usr/local/arm/3.4.1/arm-linux/ 
exec_prefix=${prefix} 
bindir=${exec_prefix}/bin 
libdir=${exec_prefix}/lib 
includedir=${prefix}/include 
#  这里改为 ARM
ARCH=ARM
SYS=LINUX 
#  这里改为 arm-linux-gcc
CC=arm-linux-gcc 
#  这里去掉 -DHAVE_MMXEXT -DHAVE_SSE2 -DARCH_X86
CFLAGS=-Wall -I. -O4 -ffast-math -D__X264__ -DHAVE_MALLOC_H -DSYS_LINUX -DHAVE_PTHREAD -s -fomit-frame-pointer 
LDFLAGS= -lm -lpthread -s 
AS=nasm 
ASFLAGS=-O2 -f elf 
VFW=no 
GTK=no 
EXE= 
VIS=no 
HAVE_GETOPT_LONG=1 
DEVNULL=/dev/null 
CONFIGURE_ARGS= '--enable-shared' '--prefix=/usr/local/arm/3.4.1/arm-linux/' 
SONAME=libx264.so.49 
default: $(SONAME) 
  
修改 Makefile ,将 66~68 行的 ar 和 ranlib 改为 arm 下的: 
  
libx264.a: .depend $(OBJS) $(OBJASM) 
                arm-linux-ar rc libx264.a $(OBJS) $(OBJASM) 
                arm-linux-ranlib libx264.a 
  
3. 编译安装 
  
make 
make install  
3.. 交叉编译 ffmpeg
./configure --prefix=/usr/local/arm/3.4.1/arm-linux  --cc=arm-linux-gcc --cpu=arm --enable-shared  --enable-x264 --enable-xvid --enable-gpl  --enable-pthreads
( 注意红色字体非 libx264 和 libxvid)
问题 1 : snow.c: In function `predict_slice':
snow.c:2892: warning: passing arg 5 of `add_yblock' discards qualifiers from pointer target type
snow.c: In function `common_init':
snow.c:3244: warning: assignment from incompatible pointer type
snow.c:3244: warning: assignment from incompatible pointer type
snow.c:3245: warning: assignment from incompatible pointer type
snow.c:3245: warning: assignment from incompatible pointer type
snow.c:3246: warning: assignment from incompatible pointer type
snow.c:3246: warning: assignment from incompatible pointer type
snow.c:3247: warning: assignment from incompatible pointer type
snow.c:3247: warning: assignment from incompatible pointer type
make[1]: *** [snow.o]  中断
make: *** [lib] _
答:这是我手动中断编译的,否则死机,这是一个小 bug ,改正方法,单独编译:
[root@localhost libavcodec]# arm-linux-gcc -O3 -g -Wall -Wno-switch  -DHAVE_AV_CONFIG_H -I.. -I'/home/ffmpeg/ffmpeg-0.4.9-p20051120'/libavutil -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE   -c -o snow.o snow.c 这是原来的编译选项,将 -O3 改成 -O 即可;
问题 2 : x264.c: In function `X264_init':
        x264.c:140: error: structure has no member named `b_cbr'
答:注释掉 140 行即可;
问题 3 :
strip: Unable to recognise the format of the input file
答:打开将 config.mk
如下:
 STRIP=strip 改为 arm-linux-strip 即可
解释如下:
Sometimes U got error while doing 'make install' :
strip: Unable to recognise the format of the input file

This is because the flag "INSTALLSTRIP = -s" in file config.mak
will pass to 'install' application while you do "make install" ..........
disable the flag "INSTALLSTRIP = " and make install.;0)

Or edit flag "INSTALL = $your_arm_install_application"
PS;===============================================
一般发生在交叉编译的时候。
因为安装时的 install 程序检测到标志 INSTALLSTRIP = -s ---- 即需要执行  strip  来剔除一些无用的符号。而此时  strip  又只是宿主机的,所以不能  strip  目标机的文件。
问题 4 :
需要改 strip

将config.mak中 INSTALLSTRIP=-s,-s去掉即可


本文出自 “专注嵌入式多媒体技术” 博客,请务必保留此出处http://zyg0227.blog.51cto.com/1043164/313085

linux平台ffmpeg+h.264的本机移植和交叉编译 本文讲解在ubuntu和arm平台下的ffmpeg和x264相关库的移植,最终 阅读详情

相关推荐

移植ffmpeg至海思平台

一、xvid、x264、ffmpeg源码下载 链接:https://pan.baidu.com/s/13phSFrLqkGrKDGF3_a2cSA 提取码:ls2s 二、交叉编译 1. xvid tar zxvf xvidcore-1.3.3.tar.gz cd xvidcore/build/generic ./configure --prefix=/home/workspace/arm_sof...

chenwr2018的博客 4675

交叉编译XVID

用的是mini2440提供的工具链下载xvid加压并进入build->generic输入./configure --host=arm-linux --prefix=/usr/local/arm/3.4.1/arm-linux/make成功后进入example文件夹输入arm-linux-gcc -o xvid_encraw xvid_encraw.c  -lc -lm -I..

WishMaster 1880

opencv+ffmpeg交叉编译

前提条件: 不要使用cmake-gui:要使用命令行,命令行可以识别到ffmpeg,但是cmake-gui不行 系统本身是否安装了ffmpeg:默认是会先使用本地的,所以配置的时候ffmpeg的依赖库显示yes而ffmpeg显示的时NO,尽管设置了PKG_CONFIG_PATH,所以需要卸载系统的ffmpeg 将依赖库的lib和include都复制到ffmpeg的lib和include下面 1.1编译环境及依赖库下载 库名称 版本 链接 opencv 3.4.1 f

zk_ken的博客 5658

ubuntu xvid x264 交叉编译

使用的环境是3.4.1xvidcore1.1.3键入:#CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/arm-linux --build=i686-pc-linux --host=arm-linux --target=arm-linux#make #make install在进入example目录输入arm-lin

成都_冉若愚 专栏 4443

hi3531下交叉编译移植 FFMPEG X264 XVID

1. 主机环境:   Thinkpad x230 CTO      win7 64位      +   VMware 11.1.2  + ubuntu 12.04(LTS)【Linux ubuntu 3.2.0-29-generic-                          pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686...

技术联盟 863

xvidcore_1.3.3.orig.tar.gz

Ubuntu交叉编译OpenCV时需要安装的xvid库,亲测可用。

交叉编译移植 FFMPEG X264 XVID 到 hi3531

2.移植 xvid                       a. 到如下链接下载     xvidcore-1.3.3.tar.gz                          http://ftp.br.debian.org/debian-multimedia/pool/main/x/xvidcore/                        b.  tar -zxvf xvid...

上善若水 342

从ISO 17987到SAE J2602:LIN一致性测试标准全景解读与CANoe实现

本文深入解析了从ISO 17987到SAE J2602的LIN一致性测试标准技术演进,详细对比了两大标准体系的技术差异,并基于Vector CANoe平台演示了如何构建符合最新行业要求的自动化测试方案。文章重点介绍了SAE J2602标准的三大改进点,包括唤醒特性、传输层协议和诊断服务的增强测试要求,并提供了CANoe测试环境配置、测试模块集成及测试案例解析的实战指南。

app77的博客 335

OpenCV移植到ARM 全过程

我的环境 Host:VMware + Ubuntu 10.04 Target:Real6410 with Linux 2.6.38 Crossing Compiler:arm-linux-gcc 4.4.3  一  交叉编译链的安装 1    解压,即可得到 arm-none-linux-gnueabi 目录 # tar –xjvf arm-none-linux-gnueabi-4

jemofh159的专栏 2万+

2026 具身智能 VLA/WAM 全栈学习与训练路线:从动作建模、SFT、RL 到世界模型的 RTX PRO 6000 96GB 单卡实战指南

我会把这张表做成“”而不是只列论文名:先核对每个模型截至的公开代码、训练目标和数据接口,再单独给你一套。对于没有公开、只有推理代码或训练细节不完整的模型,我会明确标出来,避免把“论文里提到”误写成“可复现”。目前有一个重要更新:。截至今天 NVIDIA 官方开源主线已经是换成 Cosmos-Reason2-2B/Qwen3-VL 架构,动作端仍是连续路线,而且官方明确给出单卡微调时默认只训练,峰值显存约。所以你的 96GB 单卡对 GR00T SFT 非常宽裕。可以。下面我按,把它整理成一张真正面向“

u013250861的博客 444

Unity物理驱动3D汽车实现:从刚体控制到参数调优

在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案

weixin_34380948的博客 501

arm平台的opencv+ffmpeg交叉编译

这个交叉编译折磨了我好几天,刚刚实践成功,迫不及待的跟大家分享一下,希望对你有用哦。 操作环境:Ubuntu 14.04 编译器:arm-linux-guneabi-gcc Cmake版本:2.8.12.2 Cmake-gui:版本与cmake相同 目标主机:T717 Opencv版本:3.1.0 依赖库版本: Libz:zlib-1.2.11 下载网址:https://sourc...

weixin_39673207的博客 4452

LangFuse部署与实践

LangFuse的原理主要是基于可观察性和分析技术来监控和优化低延迟消息(LLM)应用。它提供了一套完整的解决方案,通过收集、处理和分析LLM应用在运行过程中产生的各种数据,来生成实时的、深入的、可操作的见解。通过提供实时的、深入的见解和可视化的跟踪功能,LangFuse使得识别和解决应用性能问题变得更加简单和高效。总的来说,LangFuse的原理是通过综合运用可观察性和分析技术,来提供对LLM应用的全面监控和优化能力。这使得开发者和运维团队能够更加高效地管理和维护他们的应用,从而提升用户体验和业务效益。

pumpkin84514的博客 7937

视频编码库-x264简介及交叉编译

是(International Telecommunication Union,国际通信联盟)和(Motion Picture Experts Group,运动图像专家组)联合制定的。而x264是一个开源的视频编码函数库,是最好的有损之一。

dengfuma的专栏 1910

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

算法大师! 276

可维护的 SAP UI5 Theming 策略:从 CSS 级联与特性选择器到 UI Theme Designer 的工程化落地

摘要:SAP UI5主题化是一个涉及CSS级联、选择器特异性和主题参数的系统工程,与应用逻辑解耦以实现品牌化和无障碍适配。轻量级调整优先使用附加CSS,重大改动才考虑创建新主题。样式冲突需通过特异性原则解决,避免滥用!important。动态添加样式应使用addStyleClass而非直接操作DOM。主题可通过bootstrap参数、URL或运行时API设置,企业级主题推荐使用UI Theme Designer。自定义内容应消费主题变量以实现一致性,避免直接修改控件内部结构或内联样式。工程化落地需规范分层和

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 307

ffmpeg移植

编译环境:ubuntu12.04 交叉编译器:arm-none-linux-gnueabi-gcc 4.4.1 目标板:iTOP4412 (cortex A9) ffmpeg库的移植主要包括:       1.yasm移植(可选,yasm是汇编编译器,ffmpeg加入它是为了提高编译速度,可在x264配置时使用--disable-asm选择不使用)       2.x264移植  ...

君子性非异 2694

GEE:基于自定义的年度时序数据集进行LandTrendr变化检测

本文介绍了使用年度时序数据进行LandTrendr变化检测的方法,包括核心函数调用、参数设置和结果可视化。通过筛选参数(年份、变化幅度和持续时间)对结果进行过滤,输出变化年份、变化幅度和持续时间。代码提供了完整的处理流程,包括数据输入、LandTrendr算法运行、结果筛选与可视化,并支持结果导出。适用于基于Google Earth Engine平台的地表变化检测分析。

养乐多的博客 752

Opencv4.2+ffmpeg交叉编译aarch64运行环境

Opencv4.2+ffmpeg交叉编译aarch64运行环境 参考文章1.https://blog.youkuaiyun.com/nila101/article/details/87367595 2.https://blog.youkuaiyun.com/lijiyu0219/article/details/105842255 一、交叉编译环境安装 可以直接apt-get isntallgcc-aarch64-linux-gnu 安装,也可以从官网下载。这里建议从官网下载安装,自定义安装路径。 建议直接从 linar.

tudou880306的专栏 2475

旗鱼优化算法(SFO)详解:从海洋猎手到智能优化

旗鱼优化算法(SFO)是一种新型群体智能优化算法,灵感来源于旗鱼的群体捕食行为。该算法采用双种群机制,模拟旗鱼(精英个体)与沙丁鱼(普通个体)的交互过程,通过交替攻击策略实现探索与开发的平衡。核心机制包括:基于猎物密度的旗鱼位置更新、随迭代衰减的攻击力度控制、以及捕食替换机制。SFO具有参数少、全局搜索能力强等特点,在高维复杂优化问题中表现优异。算法通过模拟自然界中的群体智能行为,为解决工程优化问题提供了新思路。

qq_42212808的博客 163

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 清楚debian自带播放器但历史记录
下一篇: 磁感应强度B与磁场强度H的区别,联系与物理意义
ly0303521
博客等级 码龄17年 135粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值