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

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

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

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

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

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

8 ^6 U) `# i& h+ ?* k
为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的! m$ m% E3 J/ |- Y8 ?  q3 m" o& J
sampleRate为16000的格式。
( ^  Z+ v8 h' H9 Q% f6 w5 F# t: V本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。1 p- Y2 j# P) s  _5 H$ X
执行后,会在目标目录生成和源文件相同目录结构的wave文件,( H1 _- ]) s- o+ R( c/ r
供语音识别之用。9 h) z- g7 A; o+ G2 A
" i( O% n5 b. [' n
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,
# O( M! Q# h  ~/ B5 Q可以从以下软件中获得。8 {( Z% X: ?# u( V
https://softaro.net/ffmpeggui/
( ~5 B) e  w, j+ ~  c7 L8 W+ b  |$ k4 h5 g
工具代码如下,vs2022编译即可4 f$ n2 @# G$ c/ O7 `
  1. using System;
    - ?* E- r# K0 Z# N$ m3 v
  2. using System.Diagnostics;7 |# l# i  H3 `6 F: ?
  3. using System.IO;" w: ?2 u0 e9 C3 q) ~$ Q( E, u, M

  4. % M; H$ Y' l# O. K# y
  5. class Program6 {, N: y, ^  q5 c1 P
  6. {- N4 X( X: t8 B0 ]/ h6 v+ F
  7.     static void Main(string[] args)
    3 S; s. M2 U5 q
  8.     {6 c& f' A6 r/ p; |
  9.         Console.WriteLine("cvtWave");
    / g+ A  ?2 \) x" ?7 O
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");3 ^+ M) n- a/ W/ j
  11.         string sourceFolder = Console.ReadLine();9 ^6 h4 J' \% T' I
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");
    " I0 K) N" n" m3 [" R
  13.         string destinationFolder = Console.ReadLine();
    ; ?* Q! D* B, D3 a0 l0 m; B
  14. * r! X$ s% a- v' W. N0 F) T
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);& {. k+ C" Q5 q3 t2 z  N
  16. 3 I# ~# b  o# f7 A4 V2 W
  17.         Console.WriteLine("转换完成.");/ ~8 q; P3 s# Y& ^' s' X
  18.     }
    4 Z2 X0 U2 D9 M9 K4 v% q9 y
  19. * @9 l" m6 U5 S- g; L% O9 z4 g( U9 Y
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)
    , r+ \( U8 m& o4 E5 f
  21.     {
    0 j  d; i! T# @! F7 P% _' Z3 J
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories)), m1 c" c3 A; X  }5 T3 n" y
  23.         {5 H- d- [& l/ X
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();
    4 D  e5 x; ?$ o

  25. 9 H6 Y; f1 q6 M# f+ V* o  L
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")) I5 m" Y# m1 Q: K! J8 T
  27.             {- z9 i- P* u7 F, [+ i3 _9 d% u: w
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);
    8 ^' C4 U% k, Y& |0 ?
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);8 C# t5 X4 F; y, Z0 G9 m0 K# b) B0 H
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");5 a4 r1 w1 R  t" |9 d7 ]
  31. 2 V7 Q5 H4 L* C3 f
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));
    & P9 T# g+ v! t3 w
  33.   Y+ W, ~$ U3 O6 v5 o4 t  H" u
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";
    8 z3 k- W- \4 v7 z3 D) O

  35. & e: a3 X, z) l% S) u% t$ s
  36.                 Process ffmpegProcess = new Process
    + N% O7 i  J! m4 X7 m
  37.                 {
    $ X- J; X8 |4 R( J% X1 ?
  38.                     StartInfo = new ProcessStartInfo
    % M' B* H4 X3 l
  39.                     {
    / v# v! i' E; ?) l3 `
  40.                         FileName = "ffmpeg64.exe",
    6 ~5 L6 S$ a" {1 i
  41.                         Arguments = ffmpegArgs,4 M/ G* [6 u- G5 d3 V
  42.                         UseShellExecute = false,
    : S  @9 R1 B4 O; b$ v# P, J
  43.                         RedirectStandardError = true,
    ' v! J0 B( Y9 w" }$ P
  44.                         CreateNoWindow = true* z: k7 x# p' H( H8 c. L* a8 H
  45.                     }
    , r" Z: P4 `% W) e& v7 i
  46.                 };7 V' _# T5 t8 Y- I$ l
  47. / Y8 ~3 F0 L! `4 ^* f
  48.                 ffmpegProcess.Start();8 ^, ~+ Y& m2 M3 r0 q

  49. : J" v# ]; b3 P* l9 B5 L( c
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)
    : i6 _1 ]) `4 t0 r  S: o  f- A  `
  51.                 {# E( c8 O- n5 q5 c. U
  52.                     string line = ffmpegProcess.StandardError.ReadLine();4 {) I. w0 g2 ?& e+ ~
  53.                     Console.WriteLine(line);
    # M+ I9 x# M- m: L
  54.                 }
      S- k) P: y# ^6 j. y

  55. 7 ~) b: E  m# o+ q9 h" P* L- p
  56.                 ffmpegProcess.WaitForExit();
    & u% x' S; W! g
  57.             }$ E, C, b" ]  P" c2 f* ^
  58.         }
    - @* v. `, |% R* V; u3 \
  59.     }! l9 }' Z+ l! D# l& I1 u
  60. }
    3 f1 M3 T- O, L) ?2 Q2 i
复制代码
5 Q3 S" K1 t5 K, u* W) C1 Q

) y& k7 J1 ?8 w5 y; @8 v8 k5 T9 H, j0 ?
! s' ?. h; x7 I: i
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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