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

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

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

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

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

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

" I4 X6 K0 S% k5 b
为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的) P6 P( m; q: c6 q$ C
sampleRate为16000的格式。) z) N* @$ I  D: ?- j
本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。$ D) e+ t, \- T( }/ U
执行后,会在目标目录生成和源文件相同目录结构的wave文件,
' _( G# J( Y9 c, t. ?供语音识别之用。3 v  R" g- A- ^8 N% i5 r

3 E- D2 u; S* ~! G! [7 A9 R本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,2 s- i% v: u5 [% N7 ~5 s6 A
可以从以下软件中获得。& C5 @( T6 I4 l0 Z" p) r
https://softaro.net/ffmpeggui/0 `2 A$ d5 s7 R9 t2 z4 D- g: Z
# v7 U, |0 K  Q8 T+ B) Z" ]
工具代码如下,vs2022编译即可
# @! F, o& y# n% w+ }- T* N
  1. using System;( o# |! ~; w9 l+ x! W* z
  2. using System.Diagnostics;5 t; s  k0 [( Q2 ]4 ?9 p2 M, N
  3. using System.IO;0 Y2 s) }# M& K) P
  4. 9 y. a5 r% P8 ?- ?# O
  5. class Program, `  ?/ v" p0 w& h- H' M: d
  6. {
    + O' j; b; N( v7 ~. K' @
  7.     static void Main(string[] args)
      `9 V4 |' B! V: ]# h: ?  }& f- b
  8.     {, f; @, C$ }' u/ c( \! j" s' Z
  9.         Console.WriteLine("cvtWave");9 W% f& E6 b: f& @
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");
    ; i8 j# h& z" R. ^: \: _, }
  11.         string sourceFolder = Console.ReadLine();7 W2 w  U1 Z- U3 z
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");
    : e3 r% j1 J4 c& g8 ]3 V7 C
  13.         string destinationFolder = Console.ReadLine();3 b  k3 e. k+ o1 y# l

  14. 5 K; p" L% l' }; d  t6 ?
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);
    ! ]2 r" [1 I3 h% Y: Y/ W2 d
  16. % Q7 y8 f- F# D
  17.         Console.WriteLine("转换完成.");' {. e$ r% V6 V! m/ |
  18.     }  F6 j, K4 @- B- F9 Y5 G

  19. ( O6 C  \0 k: B2 @0 o5 `6 h
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)
    " ~1 n5 h. c0 n& b- Y+ n$ H
  21.     {7 w( `/ x8 G* m' s
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))( d" R9 }1 I7 z
  23.         {- ~$ C# l0 q8 [. q4 K  F  X! e6 f/ q/ f
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();
    # d  E- i8 z+ h% e
  25. 8 W  S2 y4 @3 T$ q8 n( C2 b
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")
    4 `9 j2 A3 A/ q/ M8 a  \5 x
  27.             {/ @) p' k; }! [9 ?% q: R
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);
    4 c6 I1 K, ~6 s, Z5 b' Q- [
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);7 p* W7 h6 w0 ?6 a
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");
    5 v/ `/ m; B$ I# W$ q/ p

  31. 1 c5 Q: F! T# d; }. {
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));
    # M, p! I$ ^9 _! q) G- d

  33. ) K: Q; Q' X' i. f7 ~. W1 e" j
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";5 L/ W& M% ]% y, S- Z" M5 l6 O
  35. 6 b: [5 {0 m. D( B! Y! E. d$ |! i# f
  36.                 Process ffmpegProcess = new Process
    4 r: m8 K% {4 r7 ^( O5 Y; ?
  37.                 {4 F  c: L9 E7 A7 i+ n+ d1 \
  38.                     StartInfo = new ProcessStartInfo
    ! W8 X7 a; O9 p4 Q
  39.                     {' e9 R  y1 A5 H
  40.                         FileName = "ffmpeg64.exe",* k9 A1 `8 n6 g% T2 M* I% {
  41.                         Arguments = ffmpegArgs,
    8 n7 u; I) d+ L! l9 }
  42.                         UseShellExecute = false,
    ' m  W. p+ }" K; w7 l2 x  @
  43.                         RedirectStandardError = true,  z# k; k: t" f1 X/ K' G
  44.                         CreateNoWindow = true
    # z2 Y  S1 s" P
  45.                     }
    " x, L7 q4 b+ |" u2 q
  46.                 };, b( }; F! u  u( V9 P! G/ i

  47. / A/ K& ]. e" }8 I6 q6 @9 J7 P
  48.                 ffmpegProcess.Start();) {0 J! ?! R( e
  49. . v: o7 j& P7 d1 P6 _
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)
    & d! C7 q# Q6 k  i' Q
  51.                 {
    + i+ I  c' t. F$ z; N8 u. x
  52.                     string line = ffmpegProcess.StandardError.ReadLine();2 h0 D. k! |( R" K" E, }
  53.                     Console.WriteLine(line);% t# X8 }7 u* E( Y" W# J
  54.                 }: T/ v1 Y- c1 K" \- \' b: [
  55. 5 E* I2 P8 W8 I* x. g9 y
  56.                 ffmpegProcess.WaitForExit();
    $ k* l0 X# F, T( C7 J
  57.             }3 o6 T1 D/ V2 y( M
  58.         }. [- D7 T4 z8 y$ L3 C% ~$ v
  59.     }
    * A; y- @" o: R6 i7 U6 Q  F
  60. }/ M: o0 q- v% Q7 w& j( J6 `: h4 z
复制代码
' S, L. E- U6 W/ O' i( s

+ t: X/ |+ q. g* V
1 z- z' b3 }6 t* ^3 K# a
1 d9 q2 f4 O8 I1 F' Z2 Z- Q
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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