🎥 视频和音频文件的自动处理与转换教程

在这个教程中,我们将探索如何自动处理视频和音频文件,主要包括如何获取 OpenWRT 的内网 IP,如何自动将视频文件转换为 WAV 格式,如何自动监测文件更改并执行相应的脚本,以及如何避免覆盖已经存在的 WAV 文件。


1。🌐 获取 OpenWRT 的内网 IP

1.1 定义
  • OpenWRT:一种为路由器开发的开源操作系统。它可以用于各种设备,包括家用路由器和工业网关。
1.2 步骤
  1. 通过 SSH 登录到 OpenWRT 设备。
  2. 使用以下命令查看 IP 地址:
    1
    ifconfig
    或者:
    1
    ip a
  3. 在显示的结果中找到类似于 192.168.x.x 的地址。这就是 OpenWRT 的内网 IP 地址。

2。🎞 视频文件转换为 WAV 格式

2.1 定义
  • ffmpeg:一个用于处理音频和视频的强大命令行工具。
2.2 步骤
  1. 在终端中安装 ffmpeg
    1
    brew install ffmpeg
  2. 使用以下命令将视频文件转换为 WAV:
    1
    ffmpeg -i input.mp4 output.wav

3。🚀 监听目录中文件的变化并自动执行脚本

3.1 定义
  • fswatch:一个用于 macOS 和其他系统的文件系统监视器,它能够监视目录或文件的更改。
3.2 步骤
  1. 在终端中安装 fswatch

    1
    brew install fswatch
  2. 使用以下命令监听文件变化并自动执行脚本:

    1
    fswatch -o path_to_directory | xargs -I{} your_script.sh

4。🛑 避免覆盖已存在的 WAV 文件

在转换视频文件为 WAV 格式时,我们希望避免覆盖已经存在的 WAV 文件。以下是一个简单的示例脚本,说明如何在转换前检查 WAV 文件是否已存在:

1
2
3
4
5
6
7
#!/bin/bash

for video in *.mp4; do
if [ ! -f "${video%.*}.wav" ]; then
ffmpeg -i "$video" "${video%.*}.wav"
fi
done

5。🎵 处理 .wav 文件并检查 .vtt 文件

在处理 .wav 文件时,我们可能希望为每个 .wav 文件生成一个相应的 .vtt 文件。以下是一个简单的脚本,说明如何检查每个 .wav 文件是否有一个对应的 .vtt 文件,并且只为那些没有的文件生成 .vtt 文件:

1
2
3
4
5
6
7
#!/bin/bash

for file in *.wav; do
if [[ ! -e "${file%.wav}.vtt" ]]; then
your_command_to_generate_vtt "$file"
fi
done

🎥 视频和音频文件的自动处理与转换教程 (续)


6。🎵 调整音频速度

在某些情况下,你可能希望调整音频的播放速度。例如,你可能希望将音频速度加倍,以节省播放时间。以下是如何使用 ffmpeg 来实现这一目标的步骤:

6.1 步骤
  1. 使用以下命令将音频速度加倍:
    1
    ffmpeg -i input.wav -filter:a "atempo=2.0" output_2x.wav

7。🚀 同时生成正常和加速的 .wav 文件

为了效率,我们可以同时生成正常速度和加速后的 .wav 文件。以下是一个简单的示例脚本,说明如何实现这一目标:

7.1 脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

convert_to_wav() {
for video in *.mp4 *.mkv *.avi; do
if [ -f "$video" ] && [ ! -f "${video%.*}.wav" ]; then
ffmpeg -i "$video" -acodec pcm_s16le -ar 16000 "${video%.*}.wav" &

# 为.wav文件创建速度提高2倍的版本
ffmpeg -i "$video" -acodec pcm_s16le -ar 16000 -filter:a "atempo=2.0" "${video%.*}_2x.wav" &
fi
done
}

convert_to_wav

fswatch -o . | while read f; do
convert_to_wav
done

8。📝 代码细节解释

8.1 Bash 测试
  • [[ -f "$file" ]]:检查文件是否存在并且是一个常规文件。
  • [[ ! -e "${file%.wav}.vtt" ]]:检查与给定的。wav 文件相对应的。vtt 文件是否不存在。
8.2 字符串操作
  • ${video%.*}:从 $video 变量中去除最后一个 . 及其后面的内容。例如,input.mp4 会变为 input
8.3 并行处理
  • & 符号:在 bash 中,& 符号可以让命令在后台运行,这样你的脚本不会等待该命令完成,而是立即继续执行下一个命令。

9。🚫 处理文件名中的空格和特殊字符

当文件名中包含空格或其他特殊字符时,bash 可能会解析错误。一个常见的解决方案是将文件名引用起来,或使用循环时使用 IFS (Internal Field Separator) 变量来更改字段分隔符。

9.1 解决方案

为了确保文件名中的空格不会导致问题,你可以将 for 循环中的文件名用双引号引起来,例如:

1
2
3
4
5
for file in *.wav; do
if [[ ! -e "${file%.wav}.vtt" ]]; then
whispercpp "$file"
fi
done

希望这个教程能够帮助你理解如何自动处理视频和音频文件,以及如何使用各种工具来实现你的目标。祝你使用愉快!🎉🎵🎬