#region 音频转换
private int AudioIntervalTime = 100, iAudio = 0;
private string strPath = "D:\\web\\XXXX\\voice\\";
/// <summary>
/// 线程委托
/// </summary>
private delegate void DelegateAudio();
/// <summary>
/// 定时器
/// </summary>
System.Threading.Timer timeAudio;
/// <summary>
/// 定义线程
/// </summary>
private void TimeThreadAudio()
{
Thread thread = new Thread(ThreadAudio);
thread.Name = "Audio";
thread.IsBackground = true;
thread.Start();
}
/// <summary>
/// 线程委托
/// </summary>
private void ThreadAudio()
{
DelegateAudio dp = new DelegateAudio(ThreadAudioFunction);
dp.BeginInvoke(null, null);
}
/// <summary>
/// 线程定时调整
/// </summary>
private void ThreadAudioFunction()
{
timeAudio = new System.Threading.Timer(new System.Threading.TimerCallback(AudioFunction), null, 0, 0);
}
/// <summary>
/// 线程工作方法体
/// </summary>
/// <param name="sender"></param>
private void AudioFunction(object sender)
{
timeAudio.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
try
{
Dictionary<string, string> list = new RedisTool().GetAllEntriesFromHash(SysConst.str_H_Rd_AudioConvert);
foreach (var item in list)
{
string fileName = strPath + item.Key;
string targetFileName = strPath + item.Key.Replace("amr","mp3"); ;
WavConvertToAmrHelp toamr = new WavConvertToAmrHelp();
toamr.ConvertToAmr(System.Windows.Forms.Application.StartupPath, fileName, targetFileName);
ShowContent(string.Format("当前时间:{0};音频文件:{1};转换成功;\r\n", DateTime.Now.ToString(), item.Key), rtbAudioContent, iAudio++);
new RedisTool().RemoveEntryFromHash(SysConst.str_H_Rd_AudioConvert, item.Key);
}
}
catch (Exception ex)
{
LogHelper.Save(ex);
ShowContent(DateTime.Now.ToString() + "\r\n" + ex.ToString() + "\r\n", rtbAudioContent, iAudio);
}
timeAudio.Change(AudioIntervalTime, AudioIntervalTime);
}
#endregion

  

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text; namespace SZ.Company.Common
{
/// <summary>
/// 音频转换工具类
/// </summary>
public class WavConvertToAmrHelp
{
/// <summary>
/// 将Wav音频转成Amr手机音频
/// </summary>
/// <param name="applicationPath">ffmeg.exe文件路径</param>
/// <param name="fileName">WAV文件的路径(带文件名)</param>
/// <param name="targetFilName">生成目前amr文件路径(带文件名)</param>
public void ConvertToAmr(string applicationPath, string fileName, string targetFilName)
{
string c = applicationPath + @"\ffmpeg.exe -y -i " + fileName + " -ar 8000 -ab 12.2k -ac 1 " + targetFilName;
Cmd(c);
} /// <summary>
/// 执行Cmd命令
/// </summary>
private void Cmd(string c)
{
try
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.Start(); process.StandardInput.WriteLine(c);
process.StandardInput.AutoFlush = true;
process.StandardInput.WriteLine("exit"); StreamReader reader = process.StandardOutput;//截取输出流 process.WaitForExit();
}
catch
{ }
} /// <summary>
/// 获取文件的byte[]
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public byte[] GetFileByte(string fileName)
{
FileStream pFileStream = null;
byte[] pReadByte = new byte[];
try
{
pFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(pFileStream);
r.BaseStream.Seek(, SeekOrigin.Begin); //将文件指针设置到文件开
pReadByte = r.ReadBytes((int)r.BaseStream.Length);
return pReadByte;
}
catch
{
return pReadByte;
}
finally
{
if (pFileStream != null)
pFileStream.Close();
}
} /// <summary>
/// 将文件的byte[]生成文件
/// </summary>
/// <param name="pReadByte"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public bool writeFile(byte[] pReadByte, string fileName)
{
FileStream pFileStream = null;
try
{
pFileStream = new FileStream(fileName, FileMode.OpenOrCreate);
pFileStream.Write(pReadByte, , pReadByte.Length);
}
catch
{
return false;
}
finally
{
if (pFileStream != null)
pFileStream.Close();
}
return true; }
}
}

.net 使用ffmpeg.exe进行音频转码的更多相关文章

  1. C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码

    C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码 上一篇说了在winform下进行调用cmd.exe执行ffmpeg.exe进行音频转换完整demo.后来我又需要移植这个 ...

  2. C# 使用ffmpeg.exe进行音频转换完整demo

    今天在处理微信的开发接口时候,发现微信多媒体上传接口中返回的音频格式是amr.坑人的是现在大部分的web 播放器,不支持amr的格式播放.试了很多方法都不行. 没办法,只要找一个妥协的解决方案:将am ...

  3. C# 使用 ffmpeg 进行音频转码

    先放一下 ffmpeg 的官方文档以及下载地址: 官方文档:http://ffmpeg.org/ffmpeg.html 下载地址:http://ffmpeg.org/download.html 用 f ...

  4. Ffmpeg音频转码 卡顿(MP2转AAC)

    最好经手一个小的功能将mp2实时流转成AAC并发布成rtmp音频流,本身不是很难的一个需求, 一个晚上就能将功能开发好.功能开发完毕后,找来一音频文件利用Ffmpeg命令将音视频文件推成 实时udp格 ...

  5. 使用ffmpeg.exe进行转码参数说明

    使用ffmpeg.exe进行转码参数说明 摘自:https://blog.csdn.net/coloriy/article/details/47337641 2015年08月07日 13:04:32  ...

  6. Azure Functions + Azure Batch实现MP3音频转码方案

    客户需求 客户的环境是一个网络音乐播放系统,根据网络情况提供给手机用户收听各种码率的MP3歌曲,在客户没购买歌曲的情况下提供一个三十秒内的试听版本.这样一个系统非常明确地一个需求就是会定期需要将一批从 ...

  7. C++调用ffmpeg.exe提取视频帧

    有时候,我们获得一段视频,需要将其中的每一帧都提取出来,来进行一些相关的处理,这时候我们就可以需要用到ffmpeg.exe来进行视频帧的提取. ffmpeg简介:FFmpeg是一套可以用来记录.转换数 ...

  8. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  9. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

随机推荐

  1. Visual Studio 拓展插件——Image Optimizer

    一句话概括效用:在Visual Studio的解决方案中,为图片或包含图片的文件夹添加右键菜单,可对图片进行压缩,无损压缩. 在VS扩展工具中安装 安装好后在VS资源管理器中选择图片右键,在右键菜单中 ...

  2. js里function的apply vs. bind vs. call

    js里除了直接调用obj.func()之外,还提供了另外3种调用方式:apply.bind.call,都在function的原型里.这3种方法的异同在stackoverflow的这个答案里说的最清楚, ...

  3. 设计模式六大原则(5)—迪米特法则

    定义: 一个对象应该对其它的对象保持最少的了解.迪米特法则又称为最少知识法则,英文全称为Least Knowledge Principle ,简称为LKP. 个人理解: 迪米特法则主要目的是类间解耦, ...

  4. easyui 之ComboTree 用法Demo

    实现效果如下: HTML部分: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="ser ...

  5. HTTP 304

    304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档).服务器告诉客户,原来缓冲的 ...

  6. Python开发入门与实战9-基于vs的集成开发环境

    9. 基于visual studio的Python的集成开发环境 上一章我们描述了如何安装使用Java的集成开发环境Eclipse IDE,本章我们来说明另一种集成开发环境,也是笔者多年的开发习惯使用 ...

  7. Python的平凡之路(9)

    一.Paramiko模块练习 1. Paramiko模块介绍 Paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接   2 .SSHclie ...

  8. 黑马程序员——【Java基础】——Java IO流

    ---------- android培训.java培训.期待与您交流! ---------- 一.IO概述 1.IO:是Input.Output的缩写. 2.特点: (1)用于处理设备间的数据传输. ...

  9. Canvas旋转元素

    Canvas是HTML5的画布元素,有时需要按指定角度旋转某一个元素. var canvas = document.getElementById("mycanvas"); var ...

  10. Socket编程基础——面向连接TCP

    WinSock是Windows环境下的网络编程接口,它最初是基于Unix环境下的BSD Socket,是一个与网络协议无关的编程接口.WinSock包含两个主要版本,即WinSock1和WinSock ...