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

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

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

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

跳转到指定楼层
楼主
发表于 2023-9-4 08:56 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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


1 \$ s) s; n# `$ v9 I5 P+ i为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的
$ O* ?$ Y7 j& D% S2 @0 w# N- P& c6 S' M# JsampleRate为16000的格式。7 A4 l! f& z- T; W
本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。) X# t& X3 e( d
执行后,会在目标目录生成和源文件相同目录结构的wave文件,
; K7 h/ @5 H3 R3 V8 |* Y6 s供语音识别之用。# L) K; X' W9 Z) w
: L* E+ C! J; ^: V
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,5 B* U. a; Q' T5 c
可以从以下软件中获得。0 U  k* d! M( ?! u
https://softaro.net/ffmpeggui/
5 m) H$ T5 v' B: H. `2 e0 T4 k% s1 g7 c" O
工具代码如下,vs2022编译即可% j3 {3 Z; v: G' H0 b: r
  1. using System;4 |! O& m$ E0 ~" W& o. U- G/ n) V
  2. using System.Diagnostics;7 e& Y# v8 ^" C+ j& _+ z
  3. using System.IO;+ q# u8 I: n) L! s) L5 a5 U: ?

  4. 3 _3 V# I3 A8 k) C% T! O/ @. Y# K
  5. class Program0 S! X+ H( O8 l1 G
  6. {
    ; C' N( ]0 }5 `; {
  7.     static void Main(string[] args)2 F; v9 s5 h1 W' z# ~* f
  8.     {$ e9 |4 J: J$ s2 x+ R
  9.         Console.WriteLine("cvtWave");- \) c3 z0 V0 I+ M. x$ j
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");) x5 j2 {6 n5 h: ?7 \0 [
  11.         string sourceFolder = Console.ReadLine();
    4 j& P6 _5 _; y, j
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");$ z0 b& `1 v1 r. ]! y  m
  13.         string destinationFolder = Console.ReadLine();
    ' h- D& P: I- X  A. {

  14. ! f1 D: m6 p8 ]! ?
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);
    ( S' U, s8 N/ U( N
  16. 9 i3 j) v3 G5 F. _9 w, h' K
  17.         Console.WriteLine("转换完成.");
    2 ^+ i0 L! L+ b9 d" {
  18.     }1 |6 C' a6 U" n. V0 S+ i9 `* E5 }) a
  19. / v/ J; \9 S3 r, I
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)
    ; |. X! t9 M7 b% i! t9 P$ J0 ]
  21.     {
    . K+ W* c% t5 Q) O6 u
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))
      ?7 P' r  o5 ^
  23.         {$ [. G. q( w! N
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();
    7 \% E% d* ]/ `- D  Z

  25. * \: ~9 n4 E/ _  z
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")1 G7 c1 x+ b: O/ m* A0 @4 ~
  27.             {
    % o* _" f& {" |7 H' h) |/ i2 k8 y% h
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);
    . S7 H* q0 ^8 ?% L# ^1 ?
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);8 B1 ~( t4 L! h/ v1 X
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");4 o' @* G. M% E, ?6 Q

  31. . X- p2 _9 u. R* k0 U, r' Y+ ?; X) ^
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));
    - Z# Y- O# C" C$ g
  33. " A* N0 x3 I7 l/ o# M; h, F
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";
    ) i4 |; C% }) Y5 D# o

  35. & Q0 d* A; z% a- V1 J
  36.                 Process ffmpegProcess = new Process' \/ D3 }; ~' R& @4 n
  37.                 {
    / M6 ]7 u5 t7 t6 M3 H" a# G* i, O
  38.                     StartInfo = new ProcessStartInfo
    , O1 I4 R0 j0 n2 t" p5 h/ M! J3 B
  39.                     {% i) N! _+ J- N; L( Q) W
  40.                         FileName = "ffmpeg64.exe",0 Q+ `- r" P5 Q. q  P
  41.                         Arguments = ffmpegArgs,* I2 W/ ~, U. o4 l1 y6 x
  42.                         UseShellExecute = false,4 U  T! S* o* [, Q3 \, Q  {
  43.                         RedirectStandardError = true,
    ) @2 M1 s1 r' a: v6 F
  44.                         CreateNoWindow = true
    # R4 Y& p9 q, D, F3 i: ?8 [
  45.                     }
    ; v+ o9 h0 K! |( M' x
  46.                 };. R. F+ M! J3 z$ H- D
  47. * J" x5 y- ~& i+ v
  48.                 ffmpegProcess.Start();9 ^) f* R# w4 z& U; E+ V: }* f5 E2 F
  49. + z! D3 B; K+ `9 e0 @; |' n9 g* E/ A
  50.                 while (!ffmpegProcess.StandardError.EndOfStream). Y% g: O% S. O4 o* \+ L" A8 y
  51.                 {
    1 z- j+ z0 B4 Y  N0 a# U5 O
  52.                     string line = ffmpegProcess.StandardError.ReadLine();
    : Q+ A) D; o* @
  53.                     Console.WriteLine(line);: _0 U6 B. ~7 v! L, J. A5 y2 |
  54.                 }* m" E  R( P7 n0 {7 I, Q

  55. / x# v, s& U- X7 I8 O" y  V% Z' D6 Y, T
  56.                 ffmpegProcess.WaitForExit();3 U2 D6 z! L# e0 w
  57.             }
    7 Q' Z) v) X! Q! R6 I, u9 V2 F
  58.         }" E- C, H4 [; B
  59.     }
    4 O2 U2 g7 c# \7 ], j4 C' v
  60. }
    ! o$ A1 H) D1 a# ]( \
复制代码
* M" L& o9 S# c1 p6 E; l
  m" z$ t2 n) V; ?  {/ _& p0 z
* U4 l2 K) F  ]& A& g
+ L) a- T$ ~3 O- b* E" U3 ]
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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