冒险解谜游戏中文网 ChinaAVG
标题:
【汉化工具系列 #1】指定wave格式转换工具(cvtWave)
[打印本页]
作者:
shane007
时间:
2023-9-4 08:56
标题:
【汉化工具系列 #1】指定wave格式转换工具(cvtWave)
) o5 j: `) R3 J0 q& `( h
为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的
- B- C+ I" I$ n, K. D
sampleRate为16000的格式。
0 h/ m/ T( a5 \( k
本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。
2 G! P* x5 w% W$ s' A
执行后,会在目标目录生成和源文件相同目录结构的wave文件,
9 ] d J' W: e5 g$ {: }/ B+ b0 p
供语音识别之用。
6 B+ t7 u- a# h, Q; a# v+ e7 u# W
, K5 a5 E% A6 c0 w1 |
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,
4 @ t+ m& A& v+ ~4 k$ h4 R. A
可以从以下软件中获得。
7 n- Y2 J& P$ {* a0 ~) I
https://softaro.net/ffmpeggui/
D/ {8 Q$ v# C* G6 G2 m
5 L9 c+ y8 M, J6 p( w( ~
工具代码如下,vs2022编译即可
$ f0 Z+ y d# a3 H8 |
using System;
2 |( {! }' d, X* J3 C9 I- V( |
using System.Diagnostics;
2 W( ~) C' X5 [0 F2 N+ g% l
using System.IO;
% ^9 f6 |4 c" f( x* Q4 _2 L4 }
7 U* ^7 H/ D# ~( g, i2 k; o& m
class Program
, P+ v# N' g7 {) b7 ~8 B1 |1 ]
{
( L1 j/ I$ Z2 J8 f
static void Main(string[] args)
5 g7 S R/ q' v) L1 I
{
' K: F, O6 O) m4 c( I4 a; h6 Q* ~" {: @
Console.WriteLine("cvtWave");
2 g' _/ r' U1 D4 g( X
Console.WriteLine("请输入源文件夹路径 (folder1):");
7 M: s8 m- C$ N9 ?2 p- @2 U; G4 z$ T
string sourceFolder = Console.ReadLine();
1 `/ E3 Y9 |1 n# S' E
Console.WriteLine("请输入目标文件夹路径 (folder2):");
5 L6 V7 f' g2 m( y
string destinationFolder = Console.ReadLine();
( x' c6 h5 v$ t3 k( ~
: i5 H& `% ? O, ~3 G5 |* a: q
ConvertFilesToWAV(sourceFolder, destinationFolder);
+ b2 n9 y3 u: A1 w' O
" r: O" v# b# n7 p
Console.WriteLine("转换完成.");
7 i E( H$ ^, U' C
}
- h/ f4 W! H* i. R: r$ f6 y
2 M' M }# s w# {, T- c
static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)
- `: [4 H2 w: z7 U! W; n
{
/ N/ B- H- Q1 u+ U
foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))
0 x6 L3 m; i+ P6 T1 ?* j
{
! q5 H) V1 }+ T9 F$ @
string extension = Path.GetExtension(sourceFilePath).ToLower();
# [/ j. n: n0 P0 v) \4 P9 u$ e( {! m
/ a0 a( p6 b* }$ X) V3 A
if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")
, Z/ U2 }5 {) J, m5 u7 K
{
% k* S5 ?) i" t; r! h* \! o6 {& q, v# g$ {
string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);
G. M& M8 `' K7 i
string destinationFilePath = Path.Combine(destinationFolder, relativePath);
7 b2 I5 [ s0 Y% |5 \
destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");
( N- p. M* p6 \ p) D' n+ I) F
/ z# E2 r9 @0 |& z2 ]* \
Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));
0 z4 T+ {( s2 l" C$ U1 j' v: N- R
& [& a' K! z/ W) W' C- D& _
string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";
% }2 }% [8 ?$ J1 i6 i& P( I) V3 _
/ N, j) `3 U" N( a9 v9 k3 J: o
Process ffmpegProcess = new Process
( y; k% @: {3 T3 }0 [
{
; ]& g3 G& r& C( W2 J/ y+ y
StartInfo = new ProcessStartInfo
D3 Y; o: K( ?
{
5 H& @9 n B3 ?4 R8 l7 ]' u$ _
FileName = "ffmpeg64.exe",
$ ~0 T9 I1 L* I, ^) ^
Arguments = ffmpegArgs,
( O. ~( \, |; D+ ?5 w) Y. f, x
UseShellExecute = false,
3 f3 P: V% u( \. i0 O- {
RedirectStandardError = true,
+ s+ n9 z$ z& n2 B8 D8 s0 L' A
CreateNoWindow = true
7 o3 M+ f" ~7 @2 Y# U
}
6 V* L( m& g4 K" A! [
};
* M$ M& S7 h* N( v3 z
3 P! C5 D2 K' s5 J' t- w; V
ffmpegProcess.Start();
- \; l3 N! O5 ]6 y4 L3 t0 S
# J6 ]1 ?% H2 X+ p( T+ n
while (!ffmpegProcess.StandardError.EndOfStream)
4 O! s' U1 E" H" f
{
% i& _/ T. ^6 a/ f5 p4 m
string line = ffmpegProcess.StandardError.ReadLine();
% A- H& q6 u" t# b; K
Console.WriteLine(line);
8 N/ y8 K/ N. M; Y
}
( n7 M/ r6 N; G( I
! l. \/ N# q/ v0 }$ x
ffmpegProcess.WaitForExit();
6 h2 _1 X2 g/ e( ~
}
4 z' I9 c4 F, P! Q' @- m0 g) ^- S
}
8 c' w" a, a8 O, ~; s( ~4 C# a% j
}
2 m! [ Z: X2 w! T8 ? ]& V
}
; N; v/ U' V+ }% s/ a$ [4 j* X5 R
复制代码
$ k3 ]; @4 i+ Y0 _) g* d4 t
3 {. ]/ c% V3 [4 U) v
( v m% k5 {; o& o5 _ S
U- J: T! [, x2 L4 j8 \) T3 W
作者:
星之韶华
时间:
2025-4-4 01:05
学习学习一下
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2