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

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

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

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

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

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


7 R3 p: `3 c) E% V* |为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的
& V4 ]7 v$ U( h' s# a& QsampleRate为16000的格式。  a* e! p7 g  f* _* ]* ]1 T5 i
本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。, h1 G+ [, N  {9 C2 e6 ^- @
执行后,会在目标目录生成和源文件相同目录结构的wave文件,
9 e# g' T$ l0 z7 j供语音识别之用。" L$ v) b: ]) F6 _9 ^4 Q2 i
2 r2 O5 k6 N# o, y# W7 [
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,
1 F* P, Z9 j6 ?3 r' ?& [5 V6 A可以从以下软件中获得。
. |; Q0 d' r2 N0 B& D* `https://softaro.net/ffmpeggui/6 r# a5 w% T; d& r+ Q! d
8 |* W; G5 [1 W( r* f( A
工具代码如下,vs2022编译即可
5 S8 o7 X; x4 k1 r
  1. using System;9 y4 E1 H; D5 _$ }1 v6 z: R
  2. using System.Diagnostics;6 e" q- [9 l! m: T. O' d1 D. u
  3. using System.IO;
    ) V, E  Z" y$ N: h  `1 y+ C
  4. 4 G6 b" v! @4 D
  5. class Program( U% }5 b! s" F
  6. {
      Z) _1 l, K# ~0 W- i  R; Y/ L
  7.     static void Main(string[] args)
    " o. m% D' v! ]
  8.     {/ @3 {' r2 x7 t7 R
  9.         Console.WriteLine("cvtWave");5 K) X6 D- @' U$ Z. n
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");" m( H* p% }' o
  11.         string sourceFolder = Console.ReadLine();
      g: b7 i  W" m5 K3 M) {% r
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");1 ^$ h' @: D3 @0 j  m9 t5 a
  13.         string destinationFolder = Console.ReadLine();
    # ~* l. J3 k7 b( ]+ F. E, k
  14.   t( U6 v4 r( j/ O& M8 ?+ _/ l' D
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);
    ( u! N2 x5 c( T: K

  16. 9 G3 y4 V/ O6 t0 y5 L; u4 U% |
  17.         Console.WriteLine("转换完成.");
    9 B6 n7 E& ]0 @) ?: e$ Z" Q
  18.     }
    8 R1 p! v6 z! G; {
  19. ! `% `' K- C/ v5 \7 q: Q
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)
    / E, l( r4 p9 z+ K- c
  21.     {+ }0 q7 C7 y/ `/ H9 Y
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))) s( m8 m; _+ Q: d; N5 e# ~( w
  23.         {/ E3 Y; A3 o) z7 N( Q1 ]( |
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();5 H5 ]3 ?, L( m! Y
  25. " h8 Y5 i/ d% h/ p
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")
      K9 E8 g: K8 N$ \& p3 j3 O
  27.             {' H0 Z! @* ]- s
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);! l# n% r) Z5 @: e5 O+ }, D
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);0 @  i9 Q4 h4 q  s
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");
    * z1 [& v  q1 T9 k+ ]7 B
  31. 9 X/ u6 V6 g% u7 M8 y0 n
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));  E$ q1 K+ E- V1 k4 u

  33. ; |: f- ~6 F4 ]+ t- n5 Y
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";
    % E/ I9 `% o5 j2 w! N0 Q4 G
  35. 0 y9 u. b2 s6 e' j! A* U
  36.                 Process ffmpegProcess = new Process
    5 K2 p- O+ ]1 w) L
  37.                 {' b( {* Z; W$ Q& w6 f' p9 R/ {( }
  38.                     StartInfo = new ProcessStartInfo! U% ]' D( {% ^3 L& U! O
  39.                     {3 l0 J: D. u8 q3 c# \$ s
  40.                         FileName = "ffmpeg64.exe",- P! _  R! T  H1 Z+ |* W
  41.                         Arguments = ffmpegArgs,
    1 f  c' n: B  ]! b9 \% b
  42.                         UseShellExecute = false,
    5 c7 m/ a* Q5 H% u
  43.                         RedirectStandardError = true,  G7 f6 i9 F; N2 @' \& z
  44.                         CreateNoWindow = true
    ( i* i7 h) Y. T* A
  45.                     }- Z; j3 V- {; m5 d0 h
  46.                 };# q# M5 [' s/ c+ y
  47. / m( w  @/ e- U! {
  48.                 ffmpegProcess.Start();
    : y5 a0 E0 X: M9 m  Q5 \: I

  49. 5 w4 [: r" @, z
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)  ^& N1 u( T- r
  51.                 {2 X+ j6 p5 t3 s% ]2 r
  52.                     string line = ffmpegProcess.StandardError.ReadLine();
    ) S* ^. i$ a0 ?" Y& y
  53.                     Console.WriteLine(line);/ F4 ], n4 ?* |; m$ m/ F- r
  54.                 }' O1 h9 A0 y( M# B% e
  55.   q0 W: v) R. h$ M, U, q2 @
  56.                 ffmpegProcess.WaitForExit();
    ! ]. a% H- X6 }' F! q
  57.             }
    , G# k, T6 I* }/ e
  58.         }5 s% ^: N, {9 F3 M- j
  59.     }
    ' ~: i2 c1 |6 I# N9 f  Z
  60. }1 D/ ~7 `& c; g( c0 |
复制代码
6 a* E- q1 V$ _# E* Q- P& {4 M

; i, h0 h, }! |  {+ P) ~3 y( S4 k% E% o  M
* X: ^! J8 i6 ]- Y& ]' @8 y& H2 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好1 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2025-4-4 01:05 | 只看该作者
学习学习一下
回复 支持 反对

使用道具 举报

高级模式
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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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