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

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

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

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

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

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

- ]! e" u: g- x! A
为了配合whisper语音识别,需要将mp3,wav,mp4等格式转换为其所需要的* F3 d' ^' @: o) T( o- t2 m0 p
sampleRate为16000的格式。
; J0 S' N  A  n$ C8 e本工具为命令行工具,根据命令提示輸入源文件和目标文件的目录。
4 t* w) [0 L+ S9 B执行后,会在目标目录生成和源文件相同目录结构的wave文件,
, M5 \- E# m3 g1 V' ]. _" y8 B供语音识别之用。6 Z; W' P7 @4 b) S, k0 ^4 L. d
* n4 p- G1 y/ v* f  O8 p
本工具需要配合ffmpeg64.exe,Processing.NDI.Lib.x64.dll,8 s+ w4 i& {$ v% U6 y8 A
可以从以下软件中获得。
- m% e" D; G; |; N* p! J+ W& f% \https://softaro.net/ffmpeggui/
6 x0 k2 N8 K8 h9 E5 C) W& H+ z% C# }$ m1 m
工具代码如下,vs2022编译即可1 F2 i- A- X4 k& D" R- M
  1. using System;
      e4 \& r0 ^) X. C- U. q
  2. using System.Diagnostics;1 n( i8 b/ p& m/ Y
  3. using System.IO;. Q* a, V5 L7 Y$ J1 z
  4. % ~2 r$ v1 R3 S1 y- f6 s) m
  5. class Program
    7 G  x5 ]0 S' H! z
  6. {, Q, G: u! w9 `- D. A
  7.     static void Main(string[] args)/ [6 Z5 T+ y  z- b
  8.     {
    ; c7 v) E* [( U
  9.         Console.WriteLine("cvtWave");
    4 u: M; T3 z$ S5 ?# m* A
  10.         Console.WriteLine("请输入源文件夹路径 (folder1):");. A2 o0 q) h5 ?+ K* g% h
  11.         string sourceFolder = Console.ReadLine();$ l) H& K. Y! m! c% B0 U1 G/ |
  12.         Console.WriteLine("请输入目标文件夹路径 (folder2):");- J/ M3 g0 U6 R& _& z! _: C
  13.         string destinationFolder = Console.ReadLine();
    7 F/ W; W" q2 O

  14. % Z8 z5 b/ k+ R' t9 @$ `4 V
  15.         ConvertFilesToWAV(sourceFolder, destinationFolder);9 W2 E/ y8 \- }
  16. 9 A4 t7 D" {  E3 |6 V2 G. U3 q
  17.         Console.WriteLine("转换完成.");6 i3 ^! m5 g4 u
  18.     }! T1 D' O6 K+ X& Z+ U: V# o! c

  19. # K( w2 M( P$ L& `
  20.     static void ConvertFilesToWAV(string sourceFolder, string destinationFolder)' L0 x. J% B0 Z( x. _6 V! n5 s. T
  21.     {% ^3 c: l, T" r+ N  ?& J* E( g
  22.         foreach (var sourceFilePath in Directory.GetFiles(sourceFolder, "*.*", SearchOption.AllDirectories))# `8 I4 m% ~2 |' n- e
  23.         {+ L7 ^( w# J3 ~( o3 b! n
  24.             string extension = Path.GetExtension(sourceFilePath).ToLower();
    , o5 @. O; ?/ n6 r) ^. M6 N; S
  25. 1 B7 l, X& C: y4 ?+ [
  26.             if (extension == ".mp4" || extension == ".avi" || extension == ".mp3")% w8 N3 ?5 \2 {  F/ e" }
  27.             {  d' Z  ~/ D$ l8 O$ ?3 W
  28.                 string relativePath = Path.GetRelativePath(sourceFolder, sourceFilePath);
    0 V  A" @/ b+ R. Z. b4 Y* k: X7 M
  29.                 string destinationFilePath = Path.Combine(destinationFolder, relativePath);
    : }) w7 c  r# M7 l5 c4 S
  30.                 destinationFilePath = Path.ChangeExtension(destinationFilePath, ".wav");! U" [% c1 Z9 K* j, p
  31. 6 }6 ?9 X; z2 }: }- U3 z0 w) ?
  32.                 Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath));
    + D% [' \5 f% c1 V" L6 g

  33. 3 Z' F" g4 b6 M- B/ v/ }4 v
  34.                 string ffmpegArgs = $"-i \"{sourceFilePath}\" -f wav -vn -b:a 256K -ar 16000 -y \"{destinationFilePath}\"";
    - [. P" y2 K% H' @

  35. - M' K7 {6 t( q
  36.                 Process ffmpegProcess = new Process" @! G) u7 S8 z  [7 Y: w8 u3 U
  37.                 {+ i  Y( i9 Q  x- C
  38.                     StartInfo = new ProcessStartInfo0 e2 Q. p( w+ B$ I1 u# l% h
  39.                     {  P# a9 F; h4 b8 S' |# f2 {0 F3 C
  40.                         FileName = "ffmpeg64.exe",
    - l- z) N+ B* h9 R
  41.                         Arguments = ffmpegArgs,& p2 f0 l+ i6 r4 e  Z
  42.                         UseShellExecute = false,
      M  Y: {# r8 p3 K4 U+ ?
  43.                         RedirectStandardError = true,, @$ I6 a( S0 F0 ^& \$ }" y
  44.                         CreateNoWindow = true
      ]; H0 w5 u% C+ B3 r# Q
  45.                     }" [4 |0 c- Q+ C) H$ h
  46.                 };
    / u* X% l( G% b* g

  47. 9 v! ?2 W. J& J6 r
  48.                 ffmpegProcess.Start();6 L+ s& `) g2 A" x7 A8 N

  49. 0 N% s% l6 J: r# d/ x. N
  50.                 while (!ffmpegProcess.StandardError.EndOfStream)7 z0 u$ ^! y$ s6 V9 M
  51.                 {" D4 @9 d- y6 g4 E/ @% g
  52.                     string line = ffmpegProcess.StandardError.ReadLine();
    % o% F! |# Y3 [
  53.                     Console.WriteLine(line);
    * L- E/ E1 B% B
  54.                 }
    2 t* w0 I' ]% q% N6 p3 ]
  55. / x# B: A$ {& V+ q. h3 H: @* {1 C
  56.                 ffmpegProcess.WaitForExit();2 F9 n* ^0 }0 `/ x
  57.             }0 d! w: H! z" x6 D" Z
  58.         }
    ) ?0 @& \5 B" u
  59.     }: I( M* Q# r8 y+ Q1 X  ^1 d
  60. }% P2 t( |( j. x
复制代码

$ y  u4 e, F7 R$ N* |/ H
1 d! L9 K- ~9 ^* h; |) ~" j! u5 U$ `& [( m# r
. n$ Q# J6 b, U3 y3 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好1 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2025-4-4 01:05 | 只看该作者
学习学习一下
回复 支持 反对

使用道具 举报

高级模式
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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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