C# 使用ffmpeg.exe进行音频转换完整demo
今天在处理微信的开发接口时候,发现微信多媒体上传接口中返回的音频格式是amr。坑人的是现在大部分的web 播放器,不支持amr的格式播放。试了很多方法都不行。
没办法,只要找一个妥协的解决方案:将amr转换成mp3再进行播放。
于是,我在网上找了不少的音频转换方案,其中有DIrectshow和 ffmpeg。DIrectshow使用起来比较复杂,我就采用ffmpeg。通过调用ffmpeg.exe传递命令参数的方式,进行音频格式的转换。
该程序,主要是封装了调用ffmpeg.exe,并执行命令参数的功能。
核心代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace WavConvertAmr { public class WavConvertToAmr { /// <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 [0]; try { pFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(pFileStream); r.BaseStream.Seek(0, 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, 0, pReadByte.Length); } catch { return false ; } finally { if (pFileStream != null ) pFileStream.Close(); } return true ; } } } |
调用代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
private void button3_Click( object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); if (open.ShowDialog() == DialogResult.OK) { string fileName = open.FileName; string targetFileName = "C:\\2222.mp3" ; WavConvertAmr.WavConvertToAmr toamr = new WavConvertAmr.WavConvertToAmr(); toamr.ConvertToAmr(System.Windows.Forms.Application.StartupPath, fileName, targetFileName); MessageBox.Show( "转换成功" ); } } |
示例下载:
链接:http://pan.baidu.com/s/1jGxa4M6 密码:bnqw
C# 使用ffmpeg.exe进行音频转换完整demo的更多相关文章
- C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码
C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码 上一篇说了在winform下进行调用cmd.exe执行ffmpeg.exe进行音频转换完整demo.后来我又需要移植这个 ...
- .net 使用ffmpeg.exe进行音频转码
#region 音频转换 private int AudioIntervalTime = 100, iAudio = 0; private string strPath = "D:\\web ...
- .net 音频转换 .amr 转 .mp3 (ffmpeg转换法)
最近看来是跟声音干上了啊! 音频转换的第二种方法,这种方法相对第一种来说,要简单的多! 首先,你得下载个“ffmpeg.exe” 插件,然后把它放到你的项目中,如下图: 程序中会调用该文件,以助于转换 ...
- FFMPEG 音频转换命令
音频转换: .转换amr到mp3: ffmpeg -i shenhuxi.amr amr2mp3.mp3 .转换amr到wav: ffmpeg -acodec libamr_nb -i shenhux ...
- C++调用ffmpeg.exe提取视频帧
有时候,我们获得一段视频,需要将其中的每一帧都提取出来,来进行一些相关的处理,这时候我们就可以需要用到ffmpeg.exe来进行视频帧的提取. ffmpeg简介:FFmpeg是一套可以用来记录.转换数 ...
- FFmpeg + php 视屏转换
什么是FFmpeg? FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进 ...
- C# ffmpeg 视频处理格式转换和添加水印
通过C#调用ffmpeg 将flv格式转换为mp4格式,并添加水印 C#调用ffmpeg的方法封装如下: /// <summary>/// 视频处理器ffmpeg.exe的位置/// &l ...
- 使用ffmpeg.exe进行转码参数说明
使用ffmpeg.exe进行转码参数说明 摘自:https://blog.csdn.net/coloriy/article/details/47337641 2015年08月07日 13:04:32 ...
- 音频转换 wav to wav、mp3或者其它
1.首先介绍一种NAudio 的方式 需要导入 NAudio.dll 下面请看核心代码 using (WaveFileReader reader = new WaveFileReader(in_pat ...
随机推荐
- SWUST0249 (凸包面积)
type node=record x,y:longint; end; ; var k,q,qq:longint; sum:double; f,g:..maxn] of node; m,i,j,a,b: ...
- C#使用Fixed创建固定大小的缓冲区
在 C# 中,可以使用 fixed 语句在数据结构中创建带有固定大小数组的缓冲区. 使用现有代码(如使用其他语言.预先存在的 DLL 或 COM 项目编写的代码)时,这种方法非常有用. 固定数组可采用 ...
- 《MORE EFFECTIVE C++》条款27 要求或者禁止对象分配在堆上
1. 要求对象分配在堆上 临时对象一般是存在于栈中的,或者是静态对象存在于常量存储区的.那么当创建一个这样的对象的时候,一般是需要隐式或显式地调用构造函数,在销毁的时候调用析构函数的.可以从这方面入手 ...
- ReentrantLock获取锁方式解读(转)
原文地址:http://www.zhihu.com/question/36771163 (一) lock()方法获取锁.如果该锁没有被另一个线程保持,则获取该锁并立即返回,将锁的保持计数设置为 1.如 ...
- sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611。请将该数据库升级为最新版本。)
最近工作中有一个sqlserver2005版本的mdf文件,还没有log文件,现在需要 附加到sqlserver2012,经过网上一顿搜索,把完整的过程奉上,供大家参考 首先创建数据库 再设置数据库的 ...
- tyvj 1067 dp 两次LIS(nlogn)
P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N ...
- POJ 1860 Currency Exchange (最短路)
Currency Exchange Time Limit : 2000/1000ms (Java/Other) Memory Limit : 60000/30000K (Java/Other) T ...
- Android滑动选择的日期选择框
效果图如下. 实现也很简单,使用的是Android的DatePicker控件.AlertDialog实现. 首先是布局文件:date_picker_dialog.xml <?xml versio ...
- 工作中遇到的问题--eclipse没有方法提示
一.eclipse自身配置问题步骤:1. 打开Eclipse ,然后“window”→“Preferences”2. 选择“java”,展开,“Editor”,选择“Content Assist”.3 ...
- spark1.5引进内置函数
在Spark 1.5.x版本,增加了一系列内置函数到DataFrame API中,并且实现了code-generation的优化.与普通的函数不同,DataFrame的函数并不会执行后立即返回一个结果 ...