TOC
歌词相关
目前做音乐视频涉及歌词相关的:翻译,提取。根据网上找到的资源和deepseek给写的脚本,可以快速完成一些事,所以记录一下。
歌词的翻译(简中 -> 繁中)
OpenCC
: Open Chinese Convert
中文简繁转换开源项目,支持词汇级别的转换、异体字转换和地区习惯用词转换(中国大陆、台湾、香港、日本新字体)。不提供普通话与粤语的转换。
安装(homebrew)
brew install opencc单个使用
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.jsonSimplified Chinese to Traditional Chinese 简体到繁体t2s.jsonTraditional Chinese to Simplified Chinese 繁体到简体s2tw.jsonSimplified Chinese to Traditional Chinese (Taiwan Standard) 简体到台湾正体tw2s.jsonTraditional Chinese (Taiwan Standard) to Simplified Chinese 台湾正体到简体s2hk.jsonSimplified Chinese to Traditional Chinese (Hong Kong variant) 简体到香港繁体hk2s.jsonTraditional Chinese (Hong Kong variant) to Simplified Chinese 香港繁体到简体s2twp.jsonSimplified Chinese to Traditional Chinese (Taiwan Standard) with Taiwanese idiom 简体到繁体(台湾正体标准)并转换为台湾常用词汇tw2sp.jsonTraditional Chinese (Taiwan Standard) to Simplified Chinese with Mainland Chinese idiom 繁体(台湾正体标准)到简体并转换为中国大陆常用词汇t2tw.jsonTraditional Chinese (OpenCC Standard) to Taiwan Standard 繁体(OpenCC 标准)到台湾正体hk2t.jsonTraditional Chinese (Hong Kong variant) to Traditional Chinese 香港繁体到繁体(OpenCC 标准)t2hk.jsonTraditional Chinese (OpenCC Standard) to Hong Kong variant 繁体(OpenCC 标准)到香港繁体t2jp.jsonTraditional Chinese Characters (Kyūjitai) to New Japanese Kanji (Shinjitai) 繁体(OpenCC 标准,旧字体)到日文新字体jp2t.jsonNew Japanese Kanji (Shinjitai) to Traditional Chinese Characters (Kyūjitai) 日文新字体到繁体(OpenCC 标准,旧字体)tw2t.jsonTraditional Chinese (Taiwan standard) to Traditional Chinese 台湾正体到繁体(OpenCC 标准)
批量使用
每次我都会有一个简中的歌词文件
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_srtsudo:因为 /usr/local/bin 是系统目录,需要管理员权限才能写入。convert_srt:去掉 .sh 后缀是为了让命令更简洁,你可以直接输入 convert_srt 来运行脚本。
sudo chmod +x /usr/local/bin/convert_srtchmod +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>