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

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

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

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

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

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


4 |& c9 O/ v  L  l为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的, M& {( E! {4 i  D0 v
sampleRate为16000的格式。
- X( z" G  s; R$ U' w本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。
9 u4 E$ a) a5 U6 u  F执行后,会在目标目录生成和源文件相同目录结构的wave文件,6 f9 y1 K9 E# b1 f( f4 K4 ^
供语音识别之用。
1 X+ T4 h+ O! g6 |) {( M; R3 \1 K) ?% R" D, ]
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,
0 v$ t. [( H4 N$ l' Q0 H' R" |) o+ m可以从以下软件中获得。7 O/ `5 n% f3 q  ~
https://softaro.net/ffmpeggui/0 I' U: R8 V5 b2 _: P8 L0 K
& y- S  q6 u( V* ^8 g/ [
工具代码如下,vs2022编译即可2 ~% [: E3 t0 a, x' M! _
  1. using System;
    9 k! z  ^. h2 W  y0 M! p
  2. using System.Diagnostics;
    ( |( A( F1 j, \  n
  3. using System.IO;
    0 q: Z8 q$ ^; S

  4. # J% D6 s8 u% h0 Z& F( G7 h* |
  5. class Program
      g3 s3 X" |' j% l+ O* q% t$ \4 }
  6. {0 s3 E( g$ O0 ~5 v* _
  7.     static void Main(string[] args)
    / w: t3 a5 ~4 F1 n1 X8 T
  8.     {% r+ z. ]& G9 V! e
  9.         Console.WriteLine("cvtWave");
    % {' W* Q/ U: a! ^; s7 L  q
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");
    + e0 L2 D/ N3 C2 r4 Z" c# f
  11.         string sourceFolder = Console.ReadLine();# D7 H  @4 e7 ~2 L9 B, |/ \1 j
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");
    6 A3 ~5 e' j7 m
  13.         string destinationFolder = Console.ReadLine();
    % T; q+ Y- P# K. I4 W- v2 ~. R
  14. 5 @2 v2 Z1 z# w9 Z8 b+ ^
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);
    4 p1 C( y! i: C9 }
  16. - B$ @- c! b  p$ G6 J$ P) ]
  17.         Console.WriteLine("转换完成.");
    9 b, K. c6 n0 O) z+ X
  18.     }
    ' p6 y1 }. v5 Y2 p" l8 B

  19. & ~) A3 v7 f0 k
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)
    6 {; h& g. l3 T
  21.     {% i, s, ]8 P. X& O+ d* J
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))
    8 ^; b' E% a# ]" o% l/ s
  23.         {
    2 d8 n  k' s0 `- |
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();) J' {' l" R) W8 |6 u9 E% B/ J

  25. 2 @2 z' \) s+ ^6 g
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")7 ?8 d$ G: D7 \/ r+ ~
  27.             {
    ! @! A! v0 _# {6 t- p
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);" E. R7 Y$ n: K
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);( C% D& R" K% \" b$ j' d8 a  \
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");
    , [6 I& S5 @5 U4 E3 C  f

  31. 8 ~- V2 k  j7 d& ~- C8 P2 s
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));1 X. [7 s: m1 N; Z) N" ~" z
  33. % D% Z1 }2 b+ P% r8 h% S9 [
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";( O9 _) o! Q2 B& c" m

  35. # F; j9 G' w( f+ @
  36.                 Process ffmpegProcess = new Process
    3 b: J9 U+ {3 f! H
  37.                 {
    3 }5 I0 U- d) s6 X$ z
  38.                     StartInfo = new ProcessStartInfo
    . W! |8 i/ F( I0 D0 q. C& d
  39.                     {
    8 n6 X4 X6 o% r! k) H3 G
  40.                         FileName = "ffmpeg64.exe",/ b# x0 q) l* @, `/ X
  41.                         Arguments = ffmpegArgs,5 J7 |" I1 L. @5 r! O
  42.                         UseShellExecute = false,& B2 P, A; t% ^. y2 Y0 G
  43.                         RedirectStandardError = true,5 h8 z0 P& L  \+ i7 T, ^  f8 _, j
  44.                         CreateNoWindow = true
    2 L* h9 L3 R) H% o5 [3 h, y
  45.                     }9 J, K1 P6 r9 B2 T2 L
  46.                 };
    - l  F8 r( @/ M7 p

  47. " c! R  w  L7 Z, K4 H
  48.                 ffmpegProcess.Start();
    2 Q4 H5 N; M3 ~# W; h

  49. 5 u9 m4 v6 K8 ?6 |+ _8 u% J0 P& B
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)
    " }, F6 ?, F3 y( r4 M
  51.                 {
    $ Z- T5 K9 ~0 L: J! U! ?, J
  52.                     string line = ffmpegProcess.StandardError.ReadLine();0 Q& _+ g% @2 _& H; h! Q9 F
  53.                     Console.WriteLine(line);
    4 _1 x; q# s/ ^) y9 Z
  54.                 }$ x- i5 s, o' M' e
  55. + K9 ^: o' f& o9 N. @
  56.                 ffmpegProcess.WaitForExit();. z, r/ p) k: \$ a  g
  57.             }
    ) \* n* h- x% z
  58.         }, p6 Z8 e! n/ z$ A
  59.     }
    / E" O9 {  L- E1 Q+ X( \
  60. }6 [7 Z9 w. T5 u
复制代码
) k' ~! j" V" ?) C( u

6 T$ _; p' d8 v$ h* |7 I
7 k# _- T% Y& e4 ^
( E: u# S' T6 b
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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