工具类 - 文字

TOC

歌词相关

目前做音乐视频涉及歌词相关的:翻译,提取。根据网上找到的资源和deepseek给写的脚本,可以快速完成一些事,所以记录一下。

歌词的翻译(简中 -> 繁中)

OpenCC : Open Chinese Convert

中文简繁转换开源项目,支持词汇级别的转换、异体字转换和地区习惯用词转换(中国大陆、台湾、香港、日本新字体)。不提供普通话与粤语的转换。

在线使用地址

  1. 安装(homebrew)

    brew install opencc
    
  2. 单个使用

    opencc -i input.file -o output.file -c config.file
    

    比如,我有一个s.srt的文件,内容是简体中文,我需要转成繁体中文(香港),那么:

    opencc -i s.srt -o hk.srt -c s2hk.json
    

    这样就会在相同的文件夹下创建一个内容是繁体中文(香港)的文件。

    关于config.file, 这是opencc原先配置好的文件。

    • s2t.json Simplified Chinese to Traditional Chinese 简体到繁体
    • t2s.json Traditional Chinese to Simplified Chinese 繁体到简体
    • s2tw.json Simplified Chinese to Traditional Chinese (Taiwan Standard) 简体到台湾正体
    • tw2s.json Traditional Chinese (Taiwan Standard) to Simplified Chinese 台湾正体到简体
    • s2hk.json Simplified Chinese to Traditional Chinese (Hong Kong variant) 简体到香港繁体
    • hk2s.json Traditional Chinese (Hong Kong variant) to Simplified Chinese 香港繁体到简体
    • s2twp.json Simplified Chinese to Traditional Chinese (Taiwan Standard) with Taiwanese idiom 简体到繁体(台湾正体标准)并转换为台湾常用词汇
    • tw2sp.json Traditional Chinese (Taiwan Standard) to Simplified Chinese with Mainland Chinese idiom 繁体(台湾正体标准)到简体并转换为中国大陆常用词汇
    • t2tw.json Traditional Chinese (OpenCC Standard) to Taiwan Standard 繁体(OpenCC 标准)到台湾正体
    • hk2t.json Traditional Chinese (Hong Kong variant) to Traditional Chinese 香港繁体到繁体(OpenCC 标准)
    • t2hk.json Traditional Chinese (OpenCC Standard) to Hong Kong variant 繁体(OpenCC 标准)到香港繁体
    • t2jp.json Traditional Chinese Characters (Kyūjitai) to New Japanese Kanji (Shinjitai) 繁体(OpenCC 标准,旧字体)到日文新字体
    • jp2t.json New Japanese Kanji (Shinjitai) to Traditional Chinese Characters (Kyūjitai) 日文新字体到繁体(OpenCC 标准,旧字体)
    • tw2t.json Traditional Chinese (Taiwan standard) to Traditional Chinese 台湾正体到繁体(OpenCC 标准)
  3. 批量使用

    每次我都会有一个简中的歌词文件s.srt,我需要繁中的:香港,台湾,繁体三个版本,之前都是老老实实输入三次命令去执行。

    opencc -i s.srt -o t.srt -c s2t.json
    opencc -i s.srt -o tw.srt -c s2tw.json
    opencc -i s.srt -o hk.srt -c s2hk.json
    

    后来让deepseek写了个脚本:

     #!/bin/bash
    
     # 转换简繁体
     opencc -i s.srt -o t.srt -c s2t.json
     opencc -i s.srt -o tw.srt -c s2tw.json
     opencc -i s.srt -o hk.srt -c s2hk.json
    
     echo "转换完成!"
    

    可以看到就是把所有命令写在一起,形成了一个文件,以后就执行这个文件就可以了。我用vs code把这个文件保存到桌面convert_srt.sh,按照deepseek的说明移动到/usr/local/bin/下,并且给予执行权限,这样以后就可以直接使用命令了

    sudo mv ~/Desktop/convert_srt.sh /usr/local/bin/convert_srt
    
    • sudo:因为 /usr/local/bin 是系统目录,需要管理员权限才能写入。

    • convert_srt:去掉 .sh 后缀是为了让命令更简洁,你可以直接输入 convert_srt 来运行脚本。

    sudo chmod +x /usr/local/bin/convert_srt
    
    • chmod +x:让脚本具有可执行权限。

    • 因为脚本已经放在 /usr/local/bin,所以不需要每次都在脚本所在目录运行 chmod +x。

    后期需要实际使用的时候,我直接cd到相应的文件夹下,然后输入convert_srt就可以直接得到另外三个繁体歌词的文件。

    xdl@192 ~ % cd '/Users/xdl/Movies/CapCut/AMT - 陈淑桦 - 笑红尘'
    xdl@192 AMT - 陈淑桦 - 笑红尘 % ls
    AMT - 陈淑桦 - 笑红尘.mov	s.srt
    xdl@192 AMT - 陈淑桦 - 笑红尘 % convert_srt
    转换完成!
    xdl@192 AMT - 陈淑桦 - 笑红尘 % ls
    AMT - 陈淑桦 - 笑红尘.mov	t.srt
    hk.srt				tw.srt
    s.srt
    

歌词的文字提取

正常的歌词文件内容s.srt如下:

1
00:00:06,516 --> 00:00:08,616
作词:厉曼婷

2
00:00:08,816 --> 00:00:11,000
作曲:李宗盛

3
00:00:11,283 --> 00:00:13,233
红尘多可笑

4
00:00:13,250 --> 00:00:15,766
痴情最无聊

...

我的需求是只要文字部分,不要时间部分,所以deepseek给我写了个脚本:

#!/bin/bash

# 输入文件
input_file="s.srt"
# 输出文件
output_file="s.txt"

# 清空输出文件(如果已存在)
> "$output_file"

# 逐行读取 .srt 文件
while IFS= read -r line; do
  # 跳过空行和时间戳行(时间戳行包含 -->)
  if [[ -z "$line" || "$line" == *"-->"* ]]; then
    continue
  fi
  # 跳过序号行(纯数字行)
  if [[ "$line" =~ ^[0-9]+$ ]]; then
    continue
  fi
  # 将歌词行写入输出文件
  echo "$line" >> "$output_file"
done < "$input_file"

echo "歌词已提取到 $output_file"

按照同样的方法,保存到/usr/local/bin/extract_lyrics,给予同样的权限,这样以后实际使用的时候直接输入extract_lyrics就可以了。

xdl@192 AMT - 陈淑桦 - 笑红尘 % extract_lyrics
歌词已提取到 s.txt
xdl@192 AMT - 陈淑桦 - 笑红尘 % ls
AMT - 陈淑桦 - 笑红尘.mov	s.txt
hk.srt				t.srt
s.srt				tw.srt

可以看到多了一个s.txt纯文本内容,里边的内容就是纯文字。

整理出来,可以看出很多东西确实可以简化,而且高效,不容易出错。

2025-3-20 更新一下,现在把这两个命令合并到一起了process_srt

audio to midi

使用pip安装了 basic-pitch, 用来将音频转为 midi 格式。

% pip3 show basic-pitch
Name: basic-pitch
Version: 0.4.0
Summary: Basic Pitch, a lightweight yet powerful audio-to-MIDI converter with pitch bend detection.
Home-page: 
Author: 
Author-email: 
License: 
Location: /Users/xdl/.pyenv/versions/3.10.13/lib/python3.10/site-packages
Requires: coremltools, librosa, mir-eval, numpy, pretty-midi, resampy, scikit-learn, scipy, typing-extensions
Required-by: 

使用方法github

basic-pitch <output-directory> <input-audio-path>

在线转换网址