设为首页收藏本站官方微博

建议 【汉化工具系列 #1】指定wave格式转换工具(cvtWave)

[复制链接]
查看: 437|回复: 0
打印 上一主题 下一主题

[建议] 【汉化工具系列 #1】指定wave格式转换工具(cvtWave)

跳转到指定楼层
楼主
发表于 2023-9-4 08:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【汉化工具系列 #1】指定wave格式转换工具(cvtWave)

7 ?$ t" p' j$ p9 Z" E0 {8 w
为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的) s; Q' p" A' Z2 [" C" U
sampleRate为16000的格式。
# V( P  {$ y7 ?- ?: S本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。
/ y' I: C4 L% X; i执行后,会在目标目录生成和源文件相同目录结构的wave文件,
+ ^% ]! J( `8 [3 B5 x供语音识别之用。" z: G3 e3 y  I$ P% t
: B" T/ M3 p3 Q" W; K# N+ F; O3 V
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,
0 A* @8 E' B# h可以从以下软件中获得。1 _2 g# A- J& i: c
https://softaro.net/ffmpeggui/
2 A% V1 ]7 Q' z9 r% W: I+ e$ a' z/ m9 ~7 i) u1 b# ]
工具代码如下,vs2022编译即可% C0 q+ [( c5 f7 p. K; W
  1. using System;2 V2 s+ t9 m+ V) k' o
  2. using System.Diagnostics;
    / c) s) o7 _2 d+ E
  3. using System.IO;
    7 E) u8 K9 R7 L9 W

  4. ; H7 u6 [0 b. p3 |& H1 [  s' Z' @
  5. class Program
    ; z- U: v, ~" ^, |2 o0 i5 \  P
  6. {' J: L* A: W9 z9 E# p9 r
  7.     static void Main(string[] args)
    : I- A; \' d) x8 D: Q
  8.     {, U/ B: k: l4 j# l, G* a
  9.         Console.WriteLine("cvtWave");% B$ g! `; J" B; `  W! T
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");  _9 l( v0 Y6 Q/ P
  11.         string sourceFolder = Console.ReadLine();" ?1 _* [; M( ]' Y/ g
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");
    , \+ Y5 k, ]( y6 ]' z$ a
  13.         string destinationFolder = Console.ReadLine();$ {8 L0 p% X# x# v% Y( S6 b
  14. ! n1 e; V  F8 B
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);0 h$ _5 i, g7 W/ p5 m
  16. + u+ \$ Q! e; s! _: a+ A, w
  17.         Console.WriteLine("转换完成.");
    6 `7 s+ G$ A0 q( t+ u' v* E5 Z5 w
  18.     }* S3 z  j. N( o2 U5 M& Z

  19. : N6 H0 j& ~5 k9 C( R6 C# V0 R
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)
    " L( M+ T" |: q0 w" j7 k
  21.     {3 [0 W$ r  M- b2 @  U7 W+ L
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))# I0 f% i0 X0 z2 L* G
  23.         {
    0 ]2 D: B& j5 v- M$ u
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();
      h6 b; k. `0 M3 i7 O3 x
  25. % c# K& n' U; e
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")
    ( ~; V9 J) F" U6 _) k
  27.             {
    6 N! a/ u6 I) N
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);8 Y5 @9 ^  ~2 @" E7 l4 v
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);
    8 J9 C0 e, S# M9 m' h
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");
    * u+ u9 C9 l2 I1 J9 S7 Z
  31. ( V- ?2 Z- d, K! z# o8 X6 k* A
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));* D' G# b  c9 U: b" V, q2 m

  33. : W) T& P" G1 d( s8 H# T& i2 S/ A$ |5 c
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";  s$ e' y6 z/ e& J0 M7 M% v

  35. + i+ x# ~2 {  J! W! W# F% t- R6 g
  36.                 Process ffmpegProcess = new Process) l' t- f9 J6 F5 U) H( M$ f
  37.                 {3 [5 Y! w, `6 t) x& ~$ O
  38.                     StartInfo = new ProcessStartInfo
    & C+ J9 ?+ i& k1 |% j/ W0 n4 W9 T
  39.                     {7 ?; A, N: P0 I* Z- `/ Q5 q# k! R
  40.                         FileName = "ffmpeg64.exe",) I) q5 B; q6 a
  41.                         Arguments = ffmpegArgs,
    : m$ Q  j* j* ]0 q3 ~7 i/ c
  42.                         UseShellExecute = false,8 ]$ ?5 }( h. y) K2 e
  43.                         RedirectStandardError = true,$ b+ P! F1 c! u/ T8 a
  44.                         CreateNoWindow = true/ J  `' \2 \" y
  45.                     }
    & y- B2 `) _& U) O
  46.                 };
    7 H  S% O; S8 y- s9 q6 h
  47. 5 N2 p2 S* K3 ]( L! G
  48.                 ffmpegProcess.Start();
    * W/ s) a: q: y# i1 k/ R

  49.   w8 c! D: @6 A/ e+ s
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)
    ! u2 ^: f5 S# Y0 G" D
  51.                 {" m2 v6 Q0 a; [3 X! ]8 }
  52.                     string line = ffmpegProcess.StandardError.ReadLine();
    . F' c& C; d$ F
  53.                     Console.WriteLine(line);) n: n; A6 C+ [5 P7 a
  54.                 }
    4 k) n3 p- d/ r0 {' z- |$ l
  55. - g; c( M0 E, b, t+ I' F1 z; x
  56.                 ffmpegProcess.WaitForExit();5 [# r5 u7 Y5 H5 }# J
  57.             }
    1 T* J% L! B6 ^- e# e
  58.         }! [! r; J+ k! d+ ]6 D; O# n
  59.     }
    # F  m, I$ x8 M& K2 I/ h1 w7 k
  60. }% N& k: e! ]3 f9 K- Y: o
复制代码
) t3 O! N! ?/ E6 f2 B# X9 k

) i% ~. U( o  `3 ?1 G+ R* S7 r1 n) y' H! D8 \1 X
/ }6 F* S: g! j8 l( P- y' Y6 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表