前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >游戏优化之音频压缩

游戏优化之音频压缩

作者头像
陨石坠灭
发布2018-10-19 15:12:49
1.4K0
发布2018-10-19 15:12:49
举报
文章被收录于专栏:全栈之路

其实这个比较容易忽略掉,但是音频资源如果不压缩的话,可能会造成游戏加载速度慢,尤其是对于一些音频资源依赖较高的游戏。

来看一下效果:

音频压缩
音频压缩

好了,其实这里要介绍的是一条命令,它依赖于ffmpeg。 具体如下:

代码语言:javascript
复制
ffmpeg -i ${f} -vn -ar 22050 -ac 1 -ab 128 -f mp3 ${dst}

其中$f为源文件,$dst为目标文件

接下来介绍一下mac上的音频压缩脚本,但首先要注意一下几个非常有用的脚本片段:

  1. 获取脚本当前路径或者上一级路径 curpath=$(cd "$(dirname "$0")/"; pwd) echo $curpath
  2. 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
  3. 获取字符串长度 len=${#str} echo $len
  4. 获取文件名称、目录及后缀 path="../a/b/c/d.png" file=${path##*/} #获取文件名称(去掉路径) filepre=${file%.*} #获取文件名称(去掉后缀,但有路径) dir=${path%/*} #获取文件目录 suffix= "${path#*.}" #获取文件后缀

拓展(多个后缀):../a/b/c/d.tar.gz 参考:Shell获取文件的文件名和扩展名的例子

上代码

代码语言:javascript
复制
#!/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格式:

代码语言:javascript
复制
audio.sh -s <音频源目录> -d <音频资源目录>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档