冒险解谜游戏中文网 ChinaAVG

标题: 【汉化工具系列 #1】指定wave格式转换工具(cvtWave) [打印本页]

作者: shane007    时间: 2023-9-4 08:56
标题: 【汉化工具系列 #1】指定wave格式转换工具(cvtWave)
) o5 j: `) R3 J0 q& `( h
为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的
- B- C+ I" I$ n, K. DsampleRate为16000的格式。0 h/ m/ T( a5 \( k
本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。2 G! P* x5 w% W$ s' A
执行后,会在目标目录生成和源文件相同目录结构的wave文件,
9 ]  d  J' W: e5 g$ {: }/ B+ b0 p供语音识别之用。
6 B+ t7 u- a# h, Q; a# v+ e7 u# W, K5 a5 E% A6 c0 w1 |
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,
4 @  t+ m& A& v+ ~4 k$ h4 R. A可以从以下软件中获得。7 n- Y2 J& P$ {* a0 ~) I
https://softaro.net/ffmpeggui/  D/ {8 Q$ v# C* G6 G2 m

5 L9 c+ y8 M, J6 p( w( ~工具代码如下,vs2022编译即可$ f0 Z+ y  d# a3 H8 |
  1. using System;2 |( {! }' d, X* J3 C9 I- V( |
  2. using System.Diagnostics;2 W( ~) C' X5 [0 F2 N+ g% l
  3. using System.IO;
    % ^9 f6 |4 c" f( x* Q4 _2 L4 }
  4. 7 U* ^7 H/ D# ~( g, i2 k; o& m
  5. class Program, P+ v# N' g7 {) b7 ~8 B1 |1 ]
  6. {
    ( L1 j/ I$ Z2 J8 f
  7.     static void Main(string[] args)5 g7 S  R/ q' v) L1 I
  8.     {' K: F, O6 O) m4 c( I4 a; h6 Q* ~" {: @
  9.         Console.WriteLine("cvtWave");
    2 g' _/ r' U1 D4 g( X
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");7 M: s8 m- C$ N9 ?2 p- @2 U; G4 z$ T
  11.         string sourceFolder = Console.ReadLine();1 `/ E3 Y9 |1 n# S' E
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");
    5 L6 V7 f' g2 m( y
  13.         string destinationFolder = Console.ReadLine();( x' c6 h5 v$ t3 k( ~

  14. : i5 H& `% ?  O, ~3 G5 |* a: q
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);
    + b2 n9 y3 u: A1 w' O

  16. " r: O" v# b# n7 p
  17.         Console.WriteLine("转换完成.");7 i  E( H$ ^, U' C
  18.     }
    - h/ f4 W! H* i. R: r$ f6 y
  19. 2 M' M  }# s  w# {, T- c
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)
    - `: [4 H2 w: z7 U! W; n
  21.     {/ N/ B- H- Q1 u+ U
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))
    0 x6 L3 m; i+ P6 T1 ?* j
  23.         {
    ! q5 H) V1 }+ T9 F$ @
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();# [/ j. n: n0 P0 v) \4 P9 u$ e( {! m
  25. / a0 a( p6 b* }$ X) V3 A
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")
    , Z/ U2 }5 {) J, m5 u7 K
  27.             {
    % k* S5 ?) i" t; r! h* \! o6 {& q, v# g$ {
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);  G. M& M8 `' K7 i
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);7 b2 I5 [  s0 Y% |5 \
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");( N- p. M* p6 \  p) D' n+ I) F
  31. / z# E2 r9 @0 |& z2 ]* \
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));0 z4 T+ {( s2 l" C$ U1 j' v: N- R
  33. & [& a' K! z/ W) W' C- D& _
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";% }2 }% [8 ?$ J1 i6 i& P( I) V3 _

  35. / N, j) `3 U" N( a9 v9 k3 J: o
  36.                 Process ffmpegProcess = new Process( y; k% @: {3 T3 }0 [
  37.                 {; ]& g3 G& r& C( W2 J/ y+ y
  38.                     StartInfo = new ProcessStartInfo
      D3 Y; o: K( ?
  39.                     {5 H& @9 n  B3 ?4 R8 l7 ]' u$ _
  40.                         FileName = "ffmpeg64.exe",
    $ ~0 T9 I1 L* I, ^) ^
  41.                         Arguments = ffmpegArgs,( O. ~( \, |; D+ ?5 w) Y. f, x
  42.                         UseShellExecute = false,
    3 f3 P: V% u( \. i0 O- {
  43.                         RedirectStandardError = true,
    + s+ n9 z$ z& n2 B8 D8 s0 L' A
  44.                         CreateNoWindow = true
    7 o3 M+ f" ~7 @2 Y# U
  45.                     }
    6 V* L( m& g4 K" A! [
  46.                 };
    * M$ M& S7 h* N( v3 z
  47. 3 P! C5 D2 K' s5 J' t- w; V
  48.                 ffmpegProcess.Start();- \; l3 N! O5 ]6 y4 L3 t0 S
  49. # J6 ]1 ?% H2 X+ p( T+ n
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)
    4 O! s' U1 E" H" f
  51.                 {% i& _/ T. ^6 a/ f5 p4 m
  52.                     string line = ffmpegProcess.StandardError.ReadLine();% A- H& q6 u" t# b; K
  53.                     Console.WriteLine(line);
    8 N/ y8 K/ N. M; Y
  54.                 }
    ( n7 M/ r6 N; G( I

  55. ! l. \/ N# q/ v0 }$ x
  56.                 ffmpegProcess.WaitForExit();6 h2 _1 X2 g/ e( ~
  57.             }4 z' I9 c4 F, P! Q' @- m0 g) ^- S
  58.         }8 c' w" a, a8 O, ~; s( ~4 C# a% j
  59.     }
    2 m! [  Z: X2 w! T8 ?  ]& V
  60. }
    ; N; v/ U' V+ }% s/ a$ [4 j* X5 R
复制代码

$ k3 ]; @4 i+ Y0 _) g* d4 t
3 {. ]/ c% V3 [4 U) v
( v  m% k5 {; o& o5 _  S
  U- J: T! [, x2 L4 j8 \) T3 W
作者: 星之韶华    时间: 2025-4-4 01:05
学习学习一下




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2