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

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

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

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

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

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


: r" L7 b; @0 T7 j4 T3 V为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的; h8 n: W* P2 P, ?) J' d! N8 k/ k
sampleRate为16000的格式。$ W( Q% G. Y7 f1 p
本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。
! k! ^0 f7 D  k2 A! Z执行后,会在目标目录生成和源文件相同目录结构的wave文件,
# j, {% @4 o$ C7 W3 c供语音识别之用。
' |( V2 I; S, n, h0 u. x; L1 ^6 g- h& K* l7 G
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,* w* E. C$ Z2 E2 E! _$ J9 u: S+ T( M
可以从以下软件中获得。
& k4 K: ]- X. W( P8 `1 i8 `$ Mhttps://softaro.net/ffmpeggui/
* |9 Z3 t; i- ~4 S7 i% h- c7 M& S( R% e
工具代码如下,vs2022编译即可. @) ~0 E" E+ A0 Y' X8 a* N
  1. using System;  U+ U8 {; H: H  T% B
  2. using System.Diagnostics;
    % \- W7 g. O" h5 \
  3. using System.IO;; N$ r. R6 b- y& y; n2 J6 v

  4. ; c& P3 C9 {+ ^# ~: y
  5. class Program6 z: g- l: D5 y( j5 q& K
  6. {
    ( T6 O" z4 h: z) y" ^' H3 [
  7.     static void Main(string[] args)  {& f0 D% {2 x% T
  8.     {- T, Y) f4 _% i) t0 W* x# L
  9.         Console.WriteLine("cvtWave");/ w- c( E$ k* F, P) O
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");  \; D9 h7 H5 |( @0 ?/ }
  11.         string sourceFolder = Console.ReadLine();
    + K$ n% h) R( w
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");8 q! W$ L5 L$ H5 v: b: _7 t1 e
  13.         string destinationFolder = Console.ReadLine();: j( h9 K0 f- M  L7 @5 P

  14. ! q2 x4 M) ?7 w4 ~
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);' s) K2 {6 V  _: \( P% ^3 r* E) Q

  16. ) d9 L' W/ s0 m: d. A4 [* g0 z: f
  17.         Console.WriteLine("转换完成.");
    + ?! h3 q. R+ A) ^7 j! ]1 p
  18.     }
    % O0 O& b5 }% m6 P8 A" g0 o- ~
  19. 0 F/ |; i' F$ o
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder), F) r2 Q# k% N: b
  21.     {8 s7 B7 f& }, T; `" I
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))! N: E: E; E6 [; m* c
  23.         {- e: S4 V6 A9 }
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();, R4 G" Y5 a/ n" v* p& y

  25. ! [  c4 v8 O8 n. C: p
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")& q/ `, C) B, u4 W
  27.             {
      q1 |+ ^( l+ c) A; [  m9 e, j4 A1 y& a
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);
    ) E; `* T; y9 W4 N% U1 H; {' h7 h
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);- [9 x/ x. t0 X
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");5 N  |2 k" C  i& W

  31. 5 S% c! l) A" w1 W! [4 u/ L: h- R
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));
    " D, {: v) r* F- K. ]+ I3 p

  33. ) U- y# R. B7 ?' ]  h7 L8 Z* y
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";
    7 Q5 J. O6 G) W4 n# g1 K; i" G" X
  35. 4 ^1 Q3 x" p, t) g" R! k
  36.                 Process ffmpegProcess = new Process+ S, ~9 y1 D6 {* ]( t
  37.                 {- k# H6 ^* t- [* v, J$ ^' Z! Z
  38.                     StartInfo = new ProcessStartInfo
    7 j  g3 X; C+ l. ~$ S
  39.                     {
    6 _1 J" h0 w% A, s+ v
  40.                         FileName = "ffmpeg64.exe",
    & x0 X0 s$ Z$ r0 a4 U
  41.                         Arguments = ffmpegArgs,+ A+ \) J% B! }; \) p. @& P# @
  42.                         UseShellExecute = false,9 a/ a- D7 P; Z$ I# ~
  43.                         RedirectStandardError = true,5 k( R! w# _. X+ j
  44.                         CreateNoWindow = true3 R% o( t2 K- N+ G& ]# l
  45.                     }7 C0 u* ?4 d! }+ A' w: p, Y0 K
  46.                 };
    $ p4 H* k3 q; N$ f8 x

  47. 1 s/ \  N  ]/ A/ x4 J5 w+ `" g
  48.                 ffmpegProcess.Start();! M6 [1 ?: ?+ t0 o! u5 h: Z
  49. " M( W  N3 |# ]  w6 h
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)9 W4 u% A% }+ N2 X
  51.                 {
    ' z  p# @( v2 S2 S
  52.                     string line = ffmpegProcess.StandardError.ReadLine();% i/ n  Z) }1 }0 F% H6 K7 [
  53.                     Console.WriteLine(line);; c5 V6 ]/ D# ?% v
  54.                 }
    ) j, C) S. W9 [+ q0 @, x5 R

  55. $ j( s7 I2 k. q. Q) j. ~
  56.                 ffmpegProcess.WaitForExit();6 W1 D- l" B0 |! `! K# q
  57.             }( r# t* w+ y7 W7 U: u" C; @
  58.         }- U; b% o$ j; Q' h- C. g
  59.     }
    , M1 I' p1 a6 ^: U9 a
  60. }
    - j) g* X7 h( r2 B) @
复制代码
/ }' X! f! d. I; k: H, R! E
; q; U7 r( ?" T% K2 Z  f1 n
! l1 h) k" t* G' v2 T3 T" T
2 f7 r0 P6 [; e- U/ j$ O6 H1 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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