ffmpeg 继续学习 -- ARM优化-- AArch64

介绍了 FFmpeg 3.0.2 “爱因斯坦”版本的发布详情,包括发布日期及稳定版本分支。此外,还详细描述了针对 ARM64 架构的汇编优化加速实现,以及包含在网络流媒体中调整 moov atom 次序的工具。
部署运行你感兴趣的模型镜像

1、FFmpeg发布3.0系列

最近ffmpeg的版本更新加快,目前出现 3.0.2 release版本。名称是“爱因斯坦” 

FFmpeg 3.0.2 "Einstein"

3.0.2 was released on 2016-04-28. It is the latest stable FFmpeg release from the 3.0 release branch, which was cut from master on 2016-02-14.

It includes the following library versions:


2、tools下面有个调整moov atom次序的工具

 * This utility rearranges a Quicktime file such that the moov atom
 * is in front of the data, thus facilitating network streaming.

3、libavcodec下有个aarch64的文件夹

h264dsp_init_aarch64.c文件中定义基于ARM 64位架构指令集的汇编优化加速
目前没有看到HEVC的加速代码

av_cold void ff_h264dsp_init_aarch64(H264DSPContext *c, const int bit_depth,
                                     const int chroma_format_idc)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_neon(cpu_flags) && bit_depth == 8) {
        c->h264_v_loop_filter_luma   = ff_h264_v_loop_filter_luma_neon;
        c->h264_h_loop_filter_luma   = ff_h264_h_loop_filter_luma_neon;
        c->h264_v_loop_filter_chroma = ff_h264_v_loop_filter_chroma_neon;
        if (chroma_format_idc <= 1)
        c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma_neon;

        c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels_16_neon;
        c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels_8_neon;
        c->weight_h264_pixels_tab[2] = ff_weight_h264_pixels_4_neon;

        c->biweight_h264_pixels_tab[0] = ff_biweight_h264_pixels_16_neon;
        c->biweight_h264_pixels_tab[1] = ff_biweight_h264_pixels_8_neon;
        c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels_4_neon;

        c->h264_idct_add        = ff_h264_idct_add_neon;
        c->h264_idct_dc_add     = ff_h264_idct_dc_add_neon;
        c->h264_idct_add16      = ff_h264_idct_add16_neon;
        c->h264_idct_add16intra = ff_h264_idct_add16intra_neon;
        if (chroma_format_idc <= 1)
            c->h264_idct_add8   = ff_h264_idct_add8_neon;
        c->h264_idct8_add       = ff_h264_idct8_add_neon;
        c->h264_idct8_dc_add    = ff_h264_idct8_dc_add_neon;
        c->h264_idct8_add4      = ff_h264_idct8_add4_neon;
    }
}



您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>我们有一个具体的问题:用户想知道如何在AP(Access Point,接入点)上运行ffmpeg-release-arm64-static.tar.xz文件。 根据之前的对话,我们已经知道静态编译的FFmpeg二进制文件可以在AP上运行,因为它是静态链接的,不依赖系统中的动态库。 现在用户提供了一个具体的文件:ffmpeg-release-arm64-static.tar.xz,这是一个针对ARM64架构的静态编译的FFmpeg压缩包。 步骤: 1. 将文件传输到AP设备上。 2. 在AP上解压文件。 3. 将解压后的二进制文件放到合适的路径(例如/usr/local/bin)或者直接运行。 4. 设置执行权限。 5. 运行测试。 需要注意的是,AP设备通常运行嵌入式Linux系统,如OpenWrt等,因此需要确保AP的CPU架构是ARM64(aarch64)的,否则无法运行。 详细步骤: 1. 传输文件到AP设备: 用户可以使用SCP命令(在电脑上执行)将文件传输到AP上: ```bash scp ffmpeg-release-arm64-static.tar.xz root@ap_ip_address:/tmp/ ``` 这里假设AP的IP地址为ap_ip_address,用户有root权限,且AP开启了SSH服务。 2. 登录AP设备: ```bash ssh root@ap_ip_address ``` 3. 在AP上解压文件: 由于文件是.tar.xz格式,需要使用tar命令解压: ```bash cd /tmp tar -xvf ffmpeg-release-arm64-static.tar.xz ``` 解压后通常会得到一个包含ffmpeg二进制文件的目录。 4. 将二进制文件移动到可执行路径(可选): 例如,将ffmpeg二进制文件复制到/usr/local/bin(确保该目录在PATH环境变量中): ```bash cp /tmp/解压后的目录/ffmpeg /usr/local/bin/ ``` 或者,如果不想移动,也可以直接在解压目录运行(但需要将当前目录加入PATH或者使用完整路径)。 5. 设置执行权限: ```bash chmod +x /usr/local/bin/ffmpeg ``` 6. 验证安装: ```bash ffmpeg -version ``` 如果看到FFmpeg的版本信息,则表示安装成功。 7. 运行FFmpeg命令: 根据需要进行视频处理,例如转换视频格式: ```bash ffmpeg -i input.mp4 output.avi ``` 注意:由于AP设备资源有限,建议运行简单的FFmpeg命令,避免高负载操作。 如果遇到问题: - 如果运行ffmpeg时提示“Permission denied”,请确保已正确设置执行权限。 - 如果提示“command not found”,请检查二进制文件所在目录是否在PATH环境变量中,或者使用完整路径运行。 - 如果提示“Exec format error”,可能是因为二进制文件的架构与AP的架构不匹配(例如AP是ARMv7而不是ARM64)。 引用之前的讨论:在AP上运行静态编译的FFmpeg需要确保架构匹配,并且设备有足够的存储空间和内存[^1]。 现在,我们可以按照上述步骤指导用户操作。 另外,用户提供的引用[1][2][3]主要是关于交叉编译环境配置的,虽然与本问题不是直接相关,但可以间接说明在嵌入式设备上部署软件需要关注交叉编译工具链和架构匹配[^1][^2][^3]。 生成相关问题: 1. 如何在AP设备上安装SCP服务以便文件传输? 2. 如何确认AP设备的CPU架构? 3. 在资源受限的AP设备上运行FFmpeg有哪些优化建议? </think>### 在AP上运行ffmpeg-release-arm64-static.tar.xz的方法 以下是详细操作步骤,结合AP设备特性和静态编译二进制特性: #### 1. **确认AP设备兼容性** - 登录AP终端执行: ```bash uname -m # 确认架构为aarch64/arm64 free -m # 检查可用内存(建议≥512MB) df -h # 检查存储空间(需预留解压后的两倍空间) ``` - **关键点**: 只有显示`aarch64`或`arm64`时才能运行此包[^1] #### 2. **文件传输与解压** ```bash # 通过SCP传输到AP(在开发机执行) scp ffmpeg-release-arm64-static.tar.xz root@ap_ip:/tmp/ # 在AP上解压(需安装xz-utils) apk add xz # OpenWrt系统 # 或 opkg install xz # 其他嵌入式系统 tar -xvf /tmp/ffmpeg-release-arm64-static.tar.xz -C /opt ``` - 解压后目录通常包含: ``` ffmpeg # 主二进制文件 ffprobe # 媒体分析工具 LICENSE # 许可证 ``` #### 3. **部署与权限设置** ```bash # 移动可执行文件 mv /opt/ffmpeg-*/ffmpeg /usr/local/bin/ mv /opt/ffmpeg-*/ffprobe /usr/local/bin/ # 可选 # 设置执行权限 chmod +x /usr/local/bin/ffmpeg # 验证版本 ffmpeg -version | head -n1 ``` - 成功输出示例: `ffmpeg version 6.1.1-static (arm64)` #### 4. **资源优化运行** ```bash # 基础转码(限制资源) ffmpeg -i input.mp4 -c:v libx264 -preset ultrafast \ -s 640x360 -b:v 500k -threads 1 output.mp4 # 关键参数说明: # -preset ultrafast # 最低CPU消耗 # -s 640x360 # 降低分辨率 # -threads 1 # 单线程避免过载 ``` #### 5. **特殊场景处理** - **空间不足时**: 挂载外部存储并直接在存储设备运行 ```bash mount /dev/sda1 /mnt/usb /mnt/usb/ffmpeg -i ... # 不解压直接运行 ``` - **权限问题**: 临时关闭安全限制(仅测试用) ```bash setenforce 0 # SELinux系统 ``` #### 6. **验证与监控** ```bash top -p $(pgrep ffmpeg) # 监控资源占用 dmesg | grep oom # 检查内存溢出 ``` > **故障处理**: > - 出现`Exec format error` → 架构不匹配[^2] > - `Killed` → 内存不足,需简化命令或增加swap > - 无输出 → 尝试添加 `-loglevel debug` 参数 通过交叉编译工具链可定制轻量版FFmpeg(引用[1][3]方法),移除非必需编解码器可减小50%体积并降低内存需求[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值