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

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

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

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

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

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


' T  Q+ B5 n1 Z: @. x0 ~2 f2 C; {6 N为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的
" J3 t% d% k/ n) g, F& M& \2 YsampleRate为16000的格式。' `) C! C3 ]+ M3 ?- d$ d$ M: l! m6 @
本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。
+ S! D) R, f2 R: {/ w执行后,会在目标目录生成和源文件相同目录结构的wave文件,
/ L$ t' S* y9 S3 k, d1 S( U  d供语音识别之用。
2 S- i$ q/ D+ @1 d. F1 a+ B' G& X7 d! }. B$ E6 |
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,3 T. v, X* Y# |  l. d
可以从以下软件中获得。
: F* U- R; u9 w/ U& }9 n# Uhttps://softaro.net/ffmpeggui/6 a0 K, A8 o* n( `: n

2 V0 k" c5 i) i+ x  u工具代码如下,vs2022编译即可0 f1 }5 t; \. t  a2 \3 i+ n
  1. using System;: S, v% M! d$ R. Y, O( C+ j
  2. using System.Diagnostics;; U) N" J8 L# h2 H. i
  3. using System.IO;4 ^* j5 e: {9 z0 ]; y
  4. 8 ~$ Y: v& Z; k
  5. class Program# c2 T0 I9 F: p" ^8 t) _* z; I
  6. {
    ( L$ k, @9 D* b/ L6 V! a0 G
  7.     static void Main(string[] args)
    % @, C  |9 t% L
  8.     {  z# D6 N( F/ c6 Q; Q0 P
  9.         Console.WriteLine("cvtWave");
    & u8 ^8 T0 O0 L4 ~
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");
    . {& j8 [3 S! P! A. C2 p! e- n0 f
  11.         string sourceFolder = Console.ReadLine();. w8 E; K6 H3 w
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");3 K% O3 E. N- O& N7 X
  13.         string destinationFolder = Console.ReadLine();1 q) J) ?$ Y* }
  14. ; N  d' e( w3 D, O+ S$ t: e
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);
    % I5 |  D5 |/ |- |6 \: ^% Q5 S1 C7 s

  16. " R' d! U- j$ K1 `8 I2 ?
  17.         Console.WriteLine("转换完成.");( f* s# t( K7 T3 ^
  18.     }& m/ b/ S+ [0 g* e

  19. , K" O) |2 d1 b$ e8 X+ m
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)( m/ Z: k8 E( J  A$ O5 ^
  21.     {! W* G/ @  K$ n8 K! j$ ]
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))# G" a$ W* e. r9 G2 u1 v; s
  23.         {8 K% b0 e( i) j2 l! F- L% w1 E( G
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();- L5 L- p2 v1 d+ N+ u
  25. . L- o7 e# x& T8 V) t/ G
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")! @. y0 J' w& S4 R) }
  27.             {0 G- O4 j- c9 M% t. c1 }
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);
    0 D; a9 m% v! l8 w4 a
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);) L# `2 G& w% ]! d+ w7 O: |3 g: [
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");
      Q3 B  N* y. E% A+ B3 U

  31. & ~6 p0 P1 x1 [3 y8 \) |8 e% J0 f
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));+ L$ N6 Q/ d# K7 g0 ~5 w' ]
  33. 2 i1 J8 g: R1 o
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";
    & P5 i# P+ O# I1 O2 b' ~/ j7 [
  35. 6 ?. K. o1 I' O/ l2 Y5 w- l  K0 u
  36.                 Process ffmpegProcess = new Process
    7 z& i4 }1 {+ ?# P. Z
  37.                 {# F% e- c$ j( R" f) g7 ]7 r/ w
  38.                     StartInfo = new ProcessStartInfo$ O+ F; n8 k4 n' z
  39.                     {: s/ I& d: ^# F( y
  40.                         FileName = "ffmpeg64.exe",) W' l$ X( v7 `7 w* C$ \( \- m
  41.                         Arguments = ffmpegArgs," i# `3 @7 }( @; W2 E
  42.                         UseShellExecute = false,
    # D5 g7 Q; y6 E8 Z" @& v" X: ?
  43.                         RedirectStandardError = true,) l" _( y# j% S: ~* S. h9 |7 H9 m
  44.                         CreateNoWindow = true
    5 w3 h+ i4 C  p0 m
  45.                     }# @5 E  y# Q2 h; ?. }# `% ]
  46.                 };' O( N% z5 q6 U9 V8 F

  47. 0 U8 a" A) E  \/ H: p
  48.                 ffmpegProcess.Start();. I% d) B4 O( ]0 n. x1 `

  49. ; Y: ~, W. D( l4 i1 j# R
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)2 u+ h( h1 u! Q" F
  51.                 {( i! ~  M& N7 \( {6 [% h
  52.                     string line = ffmpegProcess.StandardError.ReadLine();
    % H" s3 }1 |- ~. f2 \
  53.                     Console.WriteLine(line);; N- |- o0 x- v. L
  54.                 }
    * o. ]2 @) \: w; m+ L9 V* s/ g- ]7 u
  55. % t- x" K. f# o7 W8 J5 \
  56.                 ffmpegProcess.WaitForExit();
    6 d/ x* l6 X- A3 w0 x2 B
  57.             }
    5 Q9 r  n4 r% l+ [
  58.         }3 B: G! a. O5 ~
  59.     }
    7 e9 Z" C1 V1 c  r
  60. }
    3 y2 G; [  [' k* B. ^
复制代码
* o9 ~! C2 c0 W/ r5 B& N" B% j4 N

) U! q0 [/ M( W
7 G2 K- s$ }, h* O  q3 F& p9 c/ 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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