本文目录导读:

使用 Python + FFmpeg(推荐)
安装依赖
# 安装 FFmpeg(如果尚未安装) # macOS: brew install ffmpeg # Ubuntu: sudo apt install ffmpeg # Windows: 从官网下载并添加到 PATH # 安装 Python 库(可选,用于更高级的功能) pip install ffmpeg-python
脚本:remove_audio_tracks.py
import os
import subprocess
import argparse
from pathlib import Path
def remove_audio(input_path, output_path=None, keep_original=False):
"""
去除视频文件的音轨
Args:
input_path: 输入视频路径
output_path: 输出视频路径(默认覆盖原文件)
keep_original: 是否保留原文件(当覆盖时)
"""
input_path = Path(input_path)
if not input_path.exists():
print(f"错误:文件 {input_path} 不存在")
return False
# 确定输出路径
if output_path:
output_path = Path(output_path)
else:
# 覆盖原文件时,先创建一个临时文件
output_path = input_path.with_name(f"{input_path.stem}_tmp{input_path.suffix}")
# FFmpeg 命令:复制视频流,删除所有音频流
cmd = [
'ffmpeg',
'-i', str(input_path),
'-an', # 删除所有音频流
'-c:v', 'copy', # 复制视频流(不重新编码)
'-y', # 覆盖输出文件
str(output_path)
]
try:
print(f"处理中:{input_path.name}")
subprocess.run(cmd, check=True, capture_output=True, text=True)
# 如果是覆盖模式,替换原文件
if not output_path:
input_path.unlink()
output_path.rename(input_path)
elif output_path != input_path:
if keep_original:
print(f"已保存为:{output_path}")
else:
input_path.unlink()
output_path.rename(input_path)
print(f"已处理:{input_path.name}")
return True
except subprocess.CalledProcessError as e:
print(f"处理失败 {input_path.name}: {e.stderr}")
# 清理临时文件
if output_path.exists() and output_path != input_path:
output_path.unlink()
return False
def batch_process(input_dir, output_dir=None, recursive=False, keep_original=False):
"""
批量处理目录中的视频文件
Args:
input_dir: 输入目录
output_dir: 输出目录(None 表示覆盖原文件)
recursive: 是否递归处理子目录
keep_original: 是否保留原文件
"""
input_dir = Path(input_dir)
if not input_dir.exists():
print(f"错误:目录 {input_dir} 不存在")
return
# 支持的视频格式
video_extensions = {'.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv', '.webm', '.m4v'}
# 收集所有视频文件
if recursive:
files = [f for f in input_dir.rglob('*') if f.suffix.lower() in video_extensions]
else:
files = [f for f in input_dir.iterdir() if f.suffix.lower() in video_extensions and f.is_file()]
if not files:
print("未找到视频文件")
return
print(f"找到 {len(files)} 个视频文件")
# 创建输出目录(如果指定)
if output_dir:
output_dir = Path(output_dir)
output_dir.mkdir(parents=True, exist_ok=True)
success_count = 0
fail_count = 0
for file_path in files:
if output_dir:
# 保持相对路径结构(如果递归)
if recursive:
rel_path = file_path.relative_to(input_dir)
out_path = output_dir / rel_path
out_path.parent.mkdir(parents=True, exist_ok=True)
else:
out_path = output_dir / file_path.name
else:
out_path = None
if remove_audio(file_path, out_path, keep_original):
success_count += 1
else:
fail_count += 1
print(f"\n处理完成:成功 {success_count},失败 {fail_count}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='批量去除视频音轨')
parser.add_argument('input', help='输入文件或目录')
parser.add_argument('-o', '--output', help='输出目录(默认覆盖原文件)')
parser.add_argument('-r', '--recursive', action='store_true', help='递归处理子目录')
parser.add_argument('-k', '--keep', action='store_true', help='保留原文件(将处理后的文件保存到输出目录)')
args = parser.parse_args()
input_path = Path(args.input)
if input_path.is_file():
# 处理单个文件
if args.output:
output_path = Path(args.output)
if output_path.is_dir():
output_path = output_path / input_path.name
remove_audio(input_path, output_path, args.keep)
else:
remove_audio(input_path, keep_original=args.keep)
elif input_path.is_dir():
batch_process(args.input, args.output, args.recursive, args.keep)
else:
print(f"错误:{args.input} 不是有效的文件或目录")
使用示例
# 1. 处理单个文件,覆盖原文件 python remove_audio_tracks.py video.mp4 # 2. 处理单个文件,保存为新文件 python remove_audio_tracks.py video.mp4 -o video_no_audio.mp4 # 3. 批量处理当前目录所有视频,覆盖原文件 python remove_audio_tracks.py ./ # 4. 批量处理,输出到新目录,保留原文件 python remove_audio_tracks.py ./videos -o ./videos_no_audio -k # 5. 递归处理所有子目录 python remove_audio_tracks.py ./videos -r -o ./videos_no_audio -k
纯 Bash/Shell 脚本(Linux/macOS)
#!/bin/bash
# 批量去除音轨脚本
# 用法: ./remove_audio.sh [input_dir] [output_dir]
INPUT_DIR="${1:-.}"
OUTPUT_DIR="${2:-./no_audio}"
# 支持的视频格式
EXTENSIONS=("mp4" "avi" "mkv" "mov" "wmv" "flv" "webm" "m4v")
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 计数器
total=0
success=0
fail=0
echo "开始处理视频文件..."
# 遍历所有视频文件
for ext in "${EXTENSIONS[@]}"; do
find "$INPUT_DIR" -type f -iname "*.$ext" -print0 | while IFS= read -r -d '' file; do
total=$((total + 1))
# 获取相对路径
rel_path="${file#$INPUT_DIR/}"
output_file="$OUTPUT_DIR/$rel_path"
# 创建输出子目录
mkdir -p "$(dirname "$output_file")"
echo "处理中: $rel_path"
# 使用 FFmpeg 去除音轨
ffmpeg -i "$file" -an -c:v copy -y "$output_file" 2>/dev/null
if [ $? -eq 0 ]; then
echo " ✓ 成功: $output_file"
success=$((success + 1))
else
echo " ✗ 失败: $file"
fail=$((fail + 1))
fi
done
done
echo "处理完成!成功: $success, 失败: $fail"
使用 Bash 脚本
# 给脚本添加执行权限 chmod +x remove_audio.sh # 处理当前目录所有视频 ./remove_audio.sh # 处理指定目录 ./remove_audio.sh /path/to/videos # 指定输入和输出目录 ./remove_audio.sh /path/to/videos /path/to/output
Windows PowerShell 脚本
# remove_audio.ps1
param(
[string]$InputPath = ".",
[string]$OutputPath = "./no_audio",
[switch]$Recurse = $false
)
# 支持的视频格式
$extensions = @("*.mp4", "*.avi", "*.mkv", "*.mov", "*.wmv", "*.flv", "*.webm", "*.m4v")
# 创建输出目录
New-Item -ItemType Directory -Force -Path $OutputPath | Out-Null
# 计数器
$total = 0
$success = 0
$fail = 0
Write-Host "开始处理视频文件..." -ForegroundColor Green
# 遍历文件
$files = @()
foreach ($ext in $extensions) {
if ($Recurse) {
$files += Get-ChildItem -Path $InputPath -Filter $ext -Recurse -File
} else {
$files += Get-ChildItem -Path $InputPath -Filter $ext -File
}
}
foreach ($file in $files) {
$total++
# 计算相对路径
$relPath = $file.FullName.Substring((Resolve-Path $InputPath).Path.Length + 1)
$outputFile = Join-Path $OutputPath $relPath
# 创建输出子目录
$outputDir = Split-Path $outputFile -Parent
New-Item -ItemType Directory -Force -Path $outputDir | Out-Null
Write-Host "处理中: $relPath"
# FFmpeg 命令
$ffmpegCmd = "ffmpeg -i `"$($file.FullName)`" -an -c:v copy -y `"$outputFile`""
try {
Invoke-Expression $ffmpegCmd 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host " ✓ 成功" -ForegroundColor Green
$success++
} else {
Write-Host " ✗ 失败" -ForegroundColor Red
$fail++
}
} catch {
Write-Host " ✗ 错误: $_" -ForegroundColor Red
$fail++
}
}
Write-Host "`n处理完成!成功: $success, 失败: $fail" -ForegroundColor Green
使用 PowerShell 脚本
# 允许执行脚本(如果需要) Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass # 处理当前目录 .\remove_audio.ps1 # 递归处理子目录 .\remove_audio.ps1 -InputPath "C:\videos" -OutputPath "C:\videos_no_audio" -Recurse
重要提示
-
FFmpeg 必须安装:所有脚本都依赖 FFmpeg,请确保已安装并配置好环境变量。
-
速度优势:使用
-c:v copy参数,不会重新编码视频,只移除音轨,处理速度非常快。 -
风险警告:覆盖原文件操作不可逆,建议先备份重要文件。
-
输出目录:创建输出目录可以保留原始文件,更安全。
选择适合你操作系统和使用习惯的脚本即可!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播