游戏优化之音频压缩
时间:2022-06-13
本文章向大家介绍游戏优化之音频压缩,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
其实这个比较容易忽略掉,但是音频资源如果不压缩的话,可能会造成游戏加载速度慢,尤其是对于一些音频资源依赖较高的游戏。
来看一下效果:
好了,其实这里要介绍的是一条命令,它依赖于ffmpeg。 具体如下:
ffmpeg -i ${f} -vn -ar 22050 -ac 1 -ab 128 -f mp3 ${dst}
其中$f
为源文件,$dst
为目标文件
接下来介绍一下mac上的音频压缩脚本,但首先要注意一下几个非常有用的脚本片段:
- 获取脚本当前路径或者上一级路径 curpath=$(cd "$(dirname "$0")/"; pwd) echo $curpath
-
shell
读取短命令参数 具体区别,请自行查看相关文章 a="" b="" c=false while getopts ":a:b:c" opt do case $opt in a ) a=$OPTARG;; b ) b=$OPTARG;; c ) c=true;; ? ) echo "invalid param" exit 1;; esac done - 获取字符串长度 len=${#str} echo $len
- 获取文件名称、目录及后缀 path="../a/b/c/d.png" file=${path##*/} #获取文件名称(去掉路径) filepre=${file%.*} #获取文件名称(去掉后缀,但有路径) dir=${path%/*} #获取文件目录 suffix= "${path#*.}" #获取文件后缀
拓展(多个后缀):../a/b/c/d.tar.gz
参考:Shell获取文件的文件名和扩展名的例子
上代码
#!/bin/bash
# http://ffmpeg.org/download.html to get binary distribution for ogg codex
usage()
{
echo """
Usage:
Script to compress audio resource for distribution!
-s <path to source dir>
-d <path to dest dir>
"""
}
#跳转到上一级目录
curpath=$(cd "$(dirname "$0")/"; pwd)
res_path=""
des_path=""
while getopts ":s::d:" opt
do
case $opt in
s ) res_path=$OPTARG;;
d ) des_path=$OPTARG;;
? ) echo "invalid param"
exit 1;;
esac
done
if [[ ${#res_path} -eq 0 ]]; then
#statements
usage
exit 1
fi
if [[ ${#des_path} -eq 0 ]]; then
des_path="mp3"
fi
if [[ ! -d ${des_path} ]];then
mkdir ${des_path}
else
echo "clean directory ${des_path}.."
rm ${des_path}/*
echo "clean done!~"
fi
CMD_MUSIC="$curpath/bin/ffmpeg -i"
echo "processing music..."
for f in `ls ${res_path}/*`
do
# dst="${des_path}/${f##[./0-9a-zA-Z_-]*/}"
file="${f##[./0-9a-zA-Z_-]*/}"
dst="${des_path}/${file%.*}.mp3"
echo "convert ${f} to ${dst}..."
# ${CMD_MUSIC} ${f} -vn -ar 44100 -ac 2 -ab 128000 -f mp3 ${dst}
${CMD_MUSIC} ${f} -vn -ar 22050 -ac 1 -ab 128 -f mp3 ${dst}
if [[ $? -eq 0 ]]; then
#statements
echo "done!~"
else
echo "${f} failed!~"
fi
done
echo "music done!~"
用法,格式将输出为mp3
格式:
audio.sh -s <音频源目录> -d <音频资源目录>
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux core dump有什么用?
- Linux系统搭建C++开发环境
- Spring入门
- TKE容器实现限制用户在多个namespace上的访问权限(上)
- TKE容器实现限制用户在多个namespace上的访问权限(下)
- 小程序Android可以请求,ios请求失败wx.request
- css中的box-shadow详解
- 迭代器和foreach原理。
- Windows 开机自启VMware虚拟机
- CMake的使用
- 使用ant触发Tomcat的reload操作
- 访问tomcat manager应用遇到的403 access denied错误
- 使用ant执行Java代码
- TypeScript 类型注解和类型推断
- 目前解决移动端1px边框最好的方法