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

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

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

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

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

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

5 x: g+ c4 U1 j6 L% e
为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的
' r4 u" |, z) ?. _- \; dsampleRate为16000的格式。& l) C4 B. `! v) ^9 C8 V
本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。
* G- D1 Z+ Z- ]3 n6 T执行后,会在目标目录生成和源文件相同目录结构的wave文件,
, }3 P  [3 e6 u+ t' \$ V供语音识别之用。
) O4 C/ H0 g2 F; R# K% o4 c
. M+ V( z1 T& P本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,  K5 @) Y8 p0 h& e
可以从以下软件中获得。6 ^  ^& R+ V, Y! W& `! t
https://softaro.net/ffmpeggui/
) u/ }& Q! M) \
- ]& Z" D* z9 U工具代码如下,vs2022编译即可: `1 n$ s% ~* @9 r3 Z
  1. using System;
      H% `5 Y$ i0 ]  \
  2. using System.Diagnostics;& e( B9 U( x7 y  b% O, w# F
  3. using System.IO;
    ' z4 X8 p3 r2 _& {* |

  4. 8 v7 ^2 z# `( l* w$ c
  5. class Program
    4 C3 W4 |, `- u3 x
  6. {2 L) x; y5 n$ S, a9 |! ^
  7.     static void Main(string[] args)$ }2 g" H+ t$ T; g
  8.     {- p' I4 k  ^- p! x' U0 l
  9.         Console.WriteLine("cvtWave");
    ( p: t  S8 z2 P/ v
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");
    4 E' r* C3 Z& ?) J* }7 T
  11.         string sourceFolder = Console.ReadLine();# w( w3 @% P9 C, n; y* {) A; h
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");# R' |3 R" V, v! Z5 K
  13.         string destinationFolder = Console.ReadLine();" H. n$ L: z$ P5 x/ c8 f

  14. # n9 [( K7 f; t' |# `) C5 l
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);
    2 e: E; j8 z' h# ^+ D$ c1 J3 U8 b
  16. : W* q/ ^8 `- a! O+ W& _5 g
  17.         Console.WriteLine("转换完成.");. ~! t9 ?4 B: ~. e1 K5 M6 F
  18.     }
    9 h/ u7 S6 C- S
  19. ! Y0 m2 R: ?: Z. }( D: D! W3 R
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)5 ^. P3 B* t! U9 z* u2 m% s
  21.     {
    / J$ Q$ u" l( Q7 _  u" }
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))
    . I# n( Z4 E* N( r/ ~& V' s" @# P+ @
  23.         {* b: z# r/ f8 o% O# i
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();5 t6 J7 n5 T: k5 O" M

  25. " }1 J+ {& W* Y8 T
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")
    7 }% T3 ?3 E5 h
  27.             {$ w$ n) I, a  F+ o, G  m* J
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);; y! z% C* z4 q+ ^' k* e" ?
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);7 [7 Z3 F/ K8 V2 u
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");
    3 h; I# r6 M* z

  31. . M8 [$ c: `+ u' c
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));( w+ ?  E- P+ i$ R, M8 J
  33. 1 y' h7 t+ b  x" C% d. G
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";8 J) F* t9 x2 W

  35. ! w6 T- s! S, p
  36.                 Process ffmpegProcess = new Process
    2 _: y0 `9 [3 E9 k/ ^4 u
  37.                 {
    + F* ]9 p+ J  H. ]
  38.                     StartInfo = new ProcessStartInfo
    0 x) h4 r+ ~: q
  39.                     {
    . |# G' J- x8 j5 H2 Z8 F+ d6 n
  40.                         FileName = "ffmpeg64.exe",
    ' C  g! z$ k3 z+ A! }  s5 w
  41.                         Arguments = ffmpegArgs,, I5 e4 b: J1 z9 ^$ t* t
  42.                         UseShellExecute = false,
    ; _4 U1 x4 c- r. B
  43.                         RedirectStandardError = true,9 |4 j8 i  x1 t; W
  44.                         CreateNoWindow = true; h  H1 {8 h" ?3 ?
  45.                     }
    5 d/ S' M9 v; {1 p
  46.                 };
    9 V+ D- ~- Y4 n3 W

  47. 4 C$ ~7 ?" G* |) b$ B# R2 Z
  48.                 ffmpegProcess.Start();+ z5 v9 F; W; u' c5 _7 q& M

  49. 9 s2 {( {: k) D
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)# E( L, t. X0 ~6 p
  51.                 {) Z1 R( S$ s4 |* Y" G
  52.                     string line = ffmpegProcess.StandardError.ReadLine();
    : s+ j( v: I; b+ }' k0 n6 f" ?
  53.                     Console.WriteLine(line);
    ' w* B0 N1 ]3 s4 C$ E# s; K
  54.                 }
    0 A9 E6 V: F9 |2 I: I% x3 M2 c
  55. $ h; x* ]4 L8 q; O- b4 U0 C
  56.                 ffmpegProcess.WaitForExit();6 C, Z8 `2 ^5 j" {& o
  57.             }. O: ~8 ?2 o4 i5 C1 y
  58.         }7 G3 C4 y# t, R( o6 S
  59.     }5 N: k3 q) v8 p9 i- i
  60. }3 T' X9 u" x, @
复制代码

5 y- |* ^! r6 O& Z8 X- E( i0 k+ j( E, V* g/ m. f; z

, E  O- ^/ f- Q
" b( C7 m6 ~3 _7 m3 b8 p
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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