群晖---视频转音频脚本

B站 抖音上有很多音乐都很不错,但是下载的格式通常都是视频格式;

借助如下ai脚本即可实现自动转换视频为音频,转换完成后,自动删除源视频文件;

  • docker pull jrottenberg/ffmpeg

  • 添加一个定时任务,内容输入  cd /volume1/docker/v2a &&  ./v2a.sh (脚本路径

  • input_folder="改为你存放视频文件的文件夹路径"

  • output_folder="改为你存放音频文件的路径"

  • 记得给脚本777的权限,否则可能无法运行

#!/bin/bash  
  
# 获取脚本所在的目录  
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"  
  
# 日志文件目录  
LOG_DIR="${SCRIPT_DIR}/logs"  
# 确保日志文件目录存在  
mkdir -p "$LOG_DIR"  
  
# 转换视频并删除源文件的函数  
convert_and_delete() {  
    local video_file="$1"  
    local filename=$(basename -- "$video_file" .mp4)  
    local output_path="$output_folder/$filename.mp3"  
  
    # 检查输出文件是否已经存在,避免重复转换  
    if [ ! -f "$output_path" ]; then  
        # 使用 Docker 运行 FFmpeg 命令将视频转换为 MP3 音频  
        docker run --rm -v "$input_folder:/input" -v "$output_folder:/output" jrottenberg/ffmpeg -i "/input/$filename.mp4" -vn -acodec libmp3lame "/output/$filename.mp3"  
  
        # 检查 FFmpeg 命令是否成功执行  
        if [ $? -eq 0 ]; then  
            echo "Successfully converted $filename.mp3"  
            # 删除源视频文件  
            rm "$video_file"  
            if [ $? -eq 0 ]; then  
                echo "Deleted source video $filename.mp4"  
            else  
                echo "Failed to delete source video $filename.mp4"  
            fi  
        else  
            echo "Error converting $filename.mp4 to MP3"  
        fi  
    else  
        echo "Skipping $filename.mp4 as $filename.mp3 already exists"  
    fi  
}  
  
# 清理旧日志文件的函数  
cleanup_old_logs() {  
    local days_to_keep=3  
  
    # 使用find命令查找并删除超过指定天数的日志文件  
    find "$LOG_DIR" -type f -name "conversion_*.log" -mtime +$days_to_keep -delete  
}  
  
# 输入文件夹和输出文件夹  这个是唯一需要设置的信息 把下面的路径改为你视频文件和音频文件的存储文件夹
input_folder="/volume1/docker/metube/"  
output_folder="/volume1/docker/music/"  
  
# 重定向标准输出和标准错误到日志文件  
LOGFILE="${LOG_DIR}/conversion_$(date +'%Y%m%d_%H%M%S').log"  
exec > >(tee -a "$LOGFILE") 2>&1  
  
# 遍历输入文件夹中的所有视频文件  
for video_file in "$input_folder"/*.mp4; do  
    # 跳过不存在的文件  
    if [ ! -f "$video_file" ]; then  
        echo "Skipping non-existent file: $video_file"  
        continue  
    fi  
  
    convert_and_delete "$video_file"  
done  
  
# 清理旧日志文件  
cleanup_old_logs  
  
# 脚本结束提示(此消息也会写入日志文件)  
echo "Conversion complete. Logs have been cleaned up. See remaining logs in $LOG_DIR for details."

Comments