使用Expression Encoder 4 合并音频

今天经理让我帮他一个忙,把几段音频合并成一段,尽量做到音质无损。之前我没有接触过这块,就用Expression Encoder 4试了下,结果音质非常好,特与大家分享下。

示例代码下载

在 Visual Studio 2010 Ultimate + Expression Encoder 4中测试通过。

  1. Expression Studio 4 新特性

Expression Studio 4 新特性 摘自Soma博客中文版,原文地址:My favorite Expression 4 features

 

201067日,在纽约的Internet Week上,我们发布了Expression Studio 4.

Expression 4 是一套专业设计工具,用来为桌面、移动设备和网络应用设计丰富的用户体验。

Expression 4有许多新的增强和令人兴奋的功能,这里是其中我最喜欢的一些功能。

1. SketchFlow 原型发布到SharePoint

将基于SilverlightSketchFlow项目发布到SharePoint为您提供了一种便捷的与团队分享原型的方式。最棒的是,原型一旦被发布,审核人员就可以将他们的反馈意见直接发布回SharePoint,不仅设计人员可见,而且其他审核人员也能够浏览。设计人员还能够同时查看多位审核人员的反馈。这种协同审核的工作方式使得交互设计原型更加完善了。

2. Blend的新行为 (Behavior)

Expression Blend 4包含了一些新的行为,用于增强您的应用设计流程。新的行为提供了更多的功能,同时又能使您始终专注于创作引人入胜的UI艺术。例如,使用这些新的行为,您将能够充分利用多点触摸、指定流畅的布局切换、定义条件逻辑以及更方便地与MVVM应用模块交互等等功能。还有一些新的行为是专为SketchFlow设计的, 包括保持屏幕状态以及对Sketchflow动画回放的更多控制。

3. 设计UI无需代码

Expression Blend 4能帮助您设计许多复杂的布局而无需编写任何代码。

例子: 假设您希望创建一个放射形状的列表,它的内容像旋转木马一样围绕排列成圆形。使用Blend 4, 您无需编写复杂的布局代码,只需简单地使用路径画出您想要的"形状"Blend会自动将内容都恰当地摆放好。最棒的是,这不仅仅是一个设计时的功能,它同样适用于数据驱动的列表并支持动画。创建那些难以想象的复杂、丰富且极具创造力的布局,就如同绘制一条路径一样简单。

4. 使用HTML & JavaScript编写Expression Web插件

作为一个精通web的开发者,您可能更习惯使用web语言:JavaScript, HTML CSS.  Expression Web 4中我们提供了仅使用您已熟悉的web语言就能扩展应用的方法。您现在可以仅使用HTML, CSS, JavaScript 和一个简单的XML manifest 文件来添加您自己的菜单项、工具栏按钮、控制板甚至对话框。您有自己的标记用来在页面创建在线地图吗?有自定义的Twitter feed?现在您能够很方便地扩展Expression Web来将这些内容添加到您的任何站点中去。

5. 使用SEO Diagnostics改进您的搜索排名

新的SEO分析不仅包括普通的重复或缺失的标题、标记和header的检查,还检查搜索敏感文本内容(比如链接文本和页面标题),以确保他们不包含过于笼统、像"点击这里""欢迎"等不能为您的页面增加任何搜索价值的文本

我们还提供了深入的帮助文档来帮助您了解为何这些规则对获得好的搜索排名非常重要。这些文档让我们的报告不仅仅是一个简单的核查清单,还帮助您了解和掌握SEO艺术。

6. 编码和广播直播活动

使用Expression Encoder 4您可以以IIS Smooth Streaming 格式广播直播视频,以保证HTTP上使用Silverlight实现无间断回放。选择H.264 VC-1 输出,配置流媒体的数量和大小,然后直接部署到运行着IIS Media Services的服务器上。这个经重新设计的用户接口使您能方便地从多个直播源和基于文件的内容中进行选择并创建高质量的实时广播输出。

我们也利用这次发布的机会简化了Expression产品家族,使其更贴近Visual Studio 2010产品家族。新的Expression 4 产品包括:

  • Expression Web 4 专业版 (Professional)
  • Expression Studio 4 高级版 (Premium)
  • Expression Studio 4 旗舰版 (Ultimate)

现拥有Expression Studio 3Expression Web 3 产品的用户能免费升级到版本4产品: Expression Studio 4 Ultimate Expression Studio 4 Web Professional. 请访问Expression 站点了解详情。

 

  1. 使用Expression Encoder 4 合并音频

2.1、补习了点基础知识后,我们进入正题。首先我们准备几个待合并的音频文件:

 

2.2、打开Expression Encoder 4:

 

2.3、创建一个Transcoding Project:

 

2.4、Ctrl + I导入一个音频:来不及.wma

 

此时时间轴上会显示出:来不及.wma

在这里可以播放:

 

2.5、将一个音频追加到该音频的后面(当然,放在前面或其他位置也可以):

此时时间轴上显示了两个音频:

以同样的方法,将所有待合并的音频追加进去:

 

2.6、将输出格式配置一下:

可以看到,除了Windows Media外,还支持MP4和IIS平滑流。

音频质量我们选择:WMA Professional(不知道MIX视频中的WMV High是哪一种呢?):

音频中的模式选择:VBR Quality:

这里现学现卖一下:)这些专业术语我也从来没有接触过:

1)CBR

CBRConstants Bit Rate)即固定码率,就是静态(恒定)比特率的意思,CBR是一种固定采样率的压缩方式。优点是压缩快,能被大多数软件和设备支持,缺点是占用空间相对大,效果不十分理想,现已逐步被VBR的方式取代。

 固定码率是一个用来形容通信服务质量(QoSQuality of Service)的术语。和该词相对应的词是可变码率或可变比特率(英文variable bit rate,缩写VBR)。

 当形容编解码器的时候,CBR编码指的是编码器的输出码率(或者解码器的输入码率)应该是固定制(常数)。当在一个带宽受限的信道中进行多媒体通讯的时候CBR是非常有用的,因为这时候受限的是最高码率,CBR可以更好的易用这样的信道。但是CBR不适合进行存储,因为CBR将导致没有足够的码率对复杂的内容部分进行编码(从而导致质量下降),同时在简单的内容部分会浪费一些码率。

 大部分编码方案的输出都是可变长的码字,例如霍夫曼编码或者游程编码(run-length coding),这使得编码器很难做到完美的CBR。编码器可以通过调整量化(进而调整编码质量)来部分的解决这个问题,如果同时使用填充码来完美的达到CBR。(有时候,CBR也指一种非常简单的编码方案,比如将一个16位精度的音频数据流通过抽样得到一个8位精度的数据流)。

2VBR

VBRVariable Bit Rate动态比特率。也就是非固定的比特率,音频编码软件在编码时根据音频数据的复杂程度即时确定使用什么比特率,这是以质量为前提兼顾文件大小的编码方式。

VBR也称为动态比特率编码,使用这个方式时,你可以选择从最差音质/最大压缩比到最好音质/最低压缩比之间的种种过渡级数,在MP3文件编码之时,程序会尝试保持所选定的整个文件的品质,将选择适合音乐文件不同部分的不同比特率来编码。主要优点是可以让整首歌的音质都能大致达到我们的品质要求,缺点是编码时无法估计压缩后的文件大小。

bitrate就是从波形里面采样的频率, 声音自然是波形,就是振动。振动画出来是摆动的曲线,电脑存的时就在这根曲线上,隔百分之几秒取一个点,这个间隔时间就叫采样率。

一般好的mp3采样率是320kbps(就是每秒320千比特),320kbps以下波形破坏严重,很多非高音的细节都会消失,320kbpsMP3编码主要压缩高音细节.320kbps以上只有较少软件支持编码,并且音质提升不明显,不如采用无损压缩.

采点越频繁,波形还原就越精确,声音就越不失真。VBR是一种不让整个音乐取同一采样率的技术。通过动态调整让音乐复杂的地方采样多些,简单的地方采样少些,这样相同大小文件,听上去质量会更高。

VBR与传统的CBR编码的MP3不同,传统的CBRConstant BitRate)就是静态比特率,CBR约定死了MP3的采样率为固定值。一首MP3从头至尾为某固定值如128KBit/s进行压缩。而VBR则采取了一种全新的,全程动态调节技术的压缩方法。当在低音段时,VBR会自动采用较低的比特率如32KBit/s对音质进行压缩;当在高音段时会用较高的比特率如224KBit/s对音质进行压缩;当在极高端时则采用最高320KBit/s进行压缩。VBR MP3就是在控制文件大小的情况下,最大限度的提高了MP3的音质。

CBR VBR的不同点:

(1)CBR:固定位率的FRAME的大小也是固定的,只要知道文件总长度,和帧长即可由播放每帧需26ms计算得出mp3播放的总时间,也可通过计数帧的个数控制快进,快退慢放等操作。

(2)VBRVBRXING公司推出的算法,所以在MP3FRAME里会有"XING"这个关键字(现在很多流行的小软件也可以进行VBR压缩,它们是否遵守这个约定,那就不得而知了),它存放在MP3文件中的第一个有效FRAME里,它标识了这个MP3文件是VBR的。同时第一个FRAME里存放了MP3文件的FRAME的总个数,这就很容易获得了播放总时间,同时还有100个字节存放了播放总时间的100个时间分段的FRAMEINDEX

 

立体声设置为5.1声道,目前还不支持7.1声道:

在Clips选项卡中可以调节音频的顺序:

在Enhcane选项卡中可以做更细粒度的控制:

在Metadata选项卡中可以设置版权信息:

在Output选项卡中可以设置输出路径、安全信息、发布信息等:

2.7、Ctrl + E编码并输出:

编码完成后在输出目录中可以找到合并好的音频文件:

 

  1. 使用Expression Encoder 4 SDK合并音频

微软提供了Expression Encoder 4 SDK,使得开发人员可以编写程序来完成在GUI完成中的功能,现在我们来试一试。MSDN Magazine有一篇文章专门讲的Expression Encoder 3 SDK,非常值得一读,比我这篇文章深入多了:)

还是使用刚才那些音频文件,

3.1、创建一个控制台程序,添加引用:

3.2、编码方法:

代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Expression.Encoder;
using Microsoft.Expression.Encoder.Profiles;
using System.Drawing;

namespace EncoderDemo
{
class EncoderDemo
{
private void OnProgress(object sender, EncodeProgressEventArgs e)
{
Console.Write(
"\b\b\b\b\b\b\b");
Console.Write(
"{0:F2}%", e.Progress);
}

/// <summary>
/// 编码方法
/// </summary>
/// <param name="v_strSourceFileName">源文件名</param>
/// <param name="v_strOutPutPath">输出目录</param>
/// <param name="v_strMergeFileNames">待合并的文件,可以为多个</param>
private void fnEncoder(string v_strSourceFileName, string v_strOutPutPath, params string[] v_strMergeFileNames)
{
MediaItem src
= new MediaItem(v_strSourceFileName);
//设置输出文件属性
//有些在GUI中的属性如Mode、Quality等我没有找到,你找到了吗?请指教。
src.OutputFormat = new WindowsMediaOutputFormat();
src.OutputFormat.AudioProfile
= new WmaAudioProfile();
src.OutputFormat.AudioProfile.Bitrate
= new VariableConstrainedBitrate(128, 192);
src.OutputFormat.AudioProfile.Codec
= AudioCodec.WmaProfessional;
src.OutputFormat.AudioProfile.BitsPerSample
= 24;

Job job
= new Job();
job.MediaItems.Add(src);

//追加待合并的文件
foreach (string s in v_strMergeFileNames)
{
src.Sources.Add(
new Source(s));
}

job.OutputDirectory
= v_strOutPutPath;

//输出编码进度
job.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(OnProgress);

Console.WriteLine(
"Encoding…");
job.Encode();
Console.WriteLine(
"Finished encoding.");
job.Dispose();
}

static void Main(string[] args)
{
EncoderDemo coder
= new EncoderDemo();
coder.fnEncoder(
@"E:\Music\来不及.wma", @"E:\ExpressTest", @"E:\Music\23秒,32年.wma", @"E:\Music\时间海.wma", @"E:\Music\相反的我.wma");
}
}
}

3.3、执行后在控制台上会打印编码进度,同时可以看到CPU占用率很高,此时多核心有了用武之地:

 

小结:

这次偶然的机会我尝试使用了下Expression Encoder 4,感觉不错。Encoder虽然比不上一些专业软件,但是其非常易用,编码的效果也不错,如果你感兴趣,可以继续深入研究,本文仅作抛砖引玉。微软有一点做的非常好,就是出品的软件经常伴有SDK、Toolkits等,方便开发人员使用、扩展,Blend同时也提供了SDK,后面有时间我也尝试一下:

最终编码过的音频文件音质还不错,基本上听不出音质损失,是一款不错的音频、视频编辑软件,而且可以录制视频,期待后续版本。

posted @ 2010-07-09 23:13  江苏瑞步科技  阅读(5378)  评论(0编辑  收藏  举报