本文目录导读:

我来帮你创建一个批量修改视频播放速度的脚本,这里提供几个不同实现方式的脚本:
方案1:使用 FFmpeg(推荐)
批量处理脚本(Python)
#!/usr/bin/env python3
"""
批量修改视频播放速度脚本
支持:加速/减速,保持音频正常播放
"""
import os
import subprocess
import argparse
from pathlib import Path
def change_speed(input_file, output_file, speed, use_audio_pitch=True):
"""
修改视频播放速度
Args:
input_file: 输入视频文件路径
output_file: 输出视频文件路径
speed: 速度倍数 (0.5-2.0)
use_audio_pitch: 是否保持音频音调不变
"""
# 视频和音频的滤镜参数
video_filter = f"setpts={1/speed}*PTS"
if use_audio_pitch:
# 保持音调不变(使用 atempo)
audio_filter = f"atempo={speed}"
else:
# 允许音调变化
audio_filter = f"atempo={speed}"
cmd = [
'ffmpeg',
'-i', input_file,
'-filter_complex', f'{video_filter}[v];{audio_filter}[a]',
'-map', '[v]', '-map', '[a]',
'-c:v', 'libx264',
'-preset', 'medium',
'-crf', '23',
'-c:a', 'aac',
'-b:a', '128k',
'-y', # 覆盖已存在文件
output_file
]
try:
subprocess.run(cmd, check=True, capture_output=True, text=True)
print(f"✓ 处理完成: {input_file} -> {output_file}")
except subprocess.CalledProcessError as e:
print(f"✗ 处理失败: {input_file}")
print(f"错误信息: {e.stderr}")
def process_directory(input_dir, output_dir, speed, use_audio_pitch=True):
"""
批量处理目录中的所有视频文件
Args:
input_dir: 输入目录
output_dir: 输出目录
speed: 速度倍数
use_audio_pitch: 是否保持音频音调不变
"""
# 支持的视频格式
video_extensions = {'.mp4', '.avi', '.mov', '.mkv', '.flv', '.wmv', '.webm'}
# 创建输出目录
output_path = Path(output_dir)
output_path.mkdir(parents=True, exist_ok=True)
# 遍历输入目录
input_path = Path(input_dir)
files = []
for ext in video_extensions:
files.extend(input_path.glob(f'*{ext}'))
files.extend(input_path.glob(f'*{ext.upper()}'))
if not files:
print(f"在 {input_dir} 中未找到视频文件")
return
print(f"找到 {len(files)} 个视频文件")
print(f"处理速度: {speed}x, 保持音调: {use_audio_pitch}")
print("-" * 50)
# 处理每个文件
for file in files:
output_file = output_path / f"{file.stem}_speed{str(speed).replace('.', '_')}x{file.suffix}"
if output_file.exists():
print(f"跳过已存在的文件: {output_file}")
continue
print(f"处理: {file.name}")
change_speed(str(file), str(output_file), speed, use_audio_pitch)
def main():
parser = argparse.ArgumentParser(description='批量修改视频播放速度')
parser.add_argument('input_dir', help='输入视频目录路径')
parser.add_argument('output_dir', help='输出视频目录路径')
parser.add_argument('-s', '--speed', type=float, required=True,
help='播放速度倍数 (0.25 - 4.0)')
parser.add_argument('--no-pitch', action='store_true',
help='不保持音频音调(允许音调变化)')
args = parser.parse_args()
if args.speed < 0.25 or args.speed > 4.0:
print("错误:速度倍数应在 0.25 到 4.0 之间")
return
use_audio_pitch = not args.no_pitch
process_directory(args.input_dir, args.output_dir,
args.speed, use_audio_pitch)
if __name__ == "__main__":
main()
方案2:FFmpeg Shell 脚本(Linux/Mac)
#!/bin/bash
# batch_speed.sh - 批量修改视频速度的Shell脚本
# 使用方式:
# ./batch_speed.sh input_directory output_directory speed
INPUT_DIR="$1"
OUTPUT_DIR="$2"
SPEED="$3"
# 检查参数
if [ $# -ne 3 ]; then
echo "使用方法: $0 input_dir output_dir speed"
echo "示例: $0 ./videos ./fast_videos 2.0"
exit 1
fi
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 支持的视频格式
EXTENSIONS="mp4 avi mov mkv flv wmv webm"
# 计数器
processed=0
failed=0
echo "开始批量处理视频..."
echo "输入目录: $INPUT_DIR"
echo "输出目录: $OUTPUT_DIR"
echo "速度倍数: ${SPEED}x"
echo "=============================="
# 遍历所有支持的格式
for ext in $EXTENSIONS; do
for file in "$INPUT_DIR"/*."$ext" "$INPUT_DIR"/*."${ext^^}"; do
# 检查文件是否存在
[ -f "$file" ] || continue
filename=$(basename "$file")
name="${filename%.*}"
extension="${filename##*.}"
output_file="$OUTPUT_DIR/${name}_${SPEED}x.${extension}"
# 检查输出文件是否已存在
if [ -f "$output_file" ]; then
echo "跳过已存在的文件: $output_file"
continue
fi
echo "处理: $filename"
# FFmpeg命令
ffmpeg -i "$file" \
-filter_complex "[0:v]setpts=${SPEED}*PTS[v];[0:a]atempo=${SPEED}[a]" \
-map "[v]" -map "[a]" \
-c:v libx264 -preset medium -crf 23 \
-c:a aac -b:a 128k \
-y "$output_file" 2>/dev/null
if [ $? -eq 0 ]; then
echo "✓ 成功: $output_file"
((processed++))
else
echo "✗ 失败: $file"
((failed++))
fi
done
done
echo "=============================="
echo "处理完成!"
echo "成功: $processed 个文件"
echo "失败: $failed 个文件"
方案3:Windows Batch 脚本
@echo off
REM batch_speed.bat - Windows批量修改视频速度
setlocal enabledelayedexpansion
REM 检查FFmpeg是否安装
where ffmpeg >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo 错误:未找到FFmpeg,请先安装FFmpeg
pause
exit /b 1
)
REM 设置参数
set /p INPUT_DIR=请输入视频目录路径:
set /p OUTPUT_DIR=请输入输出目录路径:
set /p SPEED=请输入速度倍数(2.0):
REM 创建输出目录
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
echo 开始处理视频文件...
echo 输入目录: %INPUT_DIR%
echo 输出目录: %OUTPUT_DIR%
echo 速度倍数: %SPEED%
echo.
set processed=0
set failed=0
REM 遍历所有视频文件
for %%f in ("%INPUT_DIR%\*.mp4" "%INPUT_DIR%\*.avi" "%INPUT_DIR%\*.mov" "%INPUT_DIR%\*.mkv" "%INPUT_DIR%\*.flv") do (
if exist "%%f" (
set filename=%%~nxf
set name=%%~nf
set ext=%%~xf
set "output_file=%OUTPUT_DIR%\!name!_%SPEED%x!ext!"
if exist "!output_file!" (
echo 跳过已存在的文件: !output_file!
) else (
echo 处理: !filename!
ffmpeg -i "%%f" ^
-filter_complex "[0:v]setpts=1/%SPEED%*PTS[v];[0:a]atempo=%SPEED%[a]" ^
-map "[v]" -map "[a]" ^
-c:v libx264 -preset medium -crf 23 ^
-c:a aac -b:a 128k ^
-y "!output_file!" 2>nul
if !ERRORLEVEL! EQU 0 (
echo ✓ 成功
set /a processed+=1
) else (
echo ✗ 失败
set /a failed+=1
)
)
)
)
echo.
echo 处理完成!
echo 成功: %processed% 个文件
echo 失败: %failed% 个文件
pause
安装和使用说明
安装 FFmpeg
Windows:
- 下载 FFmpeg: https://ffmpeg.org/download.html
- 添加到系统环境变量 PATH
Mac:
brew install ffmpeg
Linux:
sudo apt-get install ffmpeg # Ubuntu/Debian sudo yum install ffmpeg # CentOS/RHEL
使用示例
Python 脚本:
# 安装依赖 pip install -r requirements.txt # 不需要额外依赖 # 基本使用 python batch_speed.py ./input_videos ./output_videos -s 2.0 # 保持音调不变(默认) python batch_speed.py ./input_videos ./output_videos -s 1.5 # 不保持音调 python batch_speed.py ./input_videos ./output_videos -s 2.0 --no-pitch
Shell 脚本:
# 添加执行权限 chmod +x batch_speed.sh # 使用 ./batch_speed.sh ./input_videos ./output_videos 2.0
常见速度推荐
- 5x: 慢动作效果
- 25x: 轻微加速(教学视频)
- 5x: 适中加速
- 0x: 快速浏览
- 0x: 极速播放
注意事项
- 确保输出目录有足够磁盘空间
- 视频格式需要使用 FFmpeg 支持的格式
- 速度倍数建议在 0.25-4.0 之间
- 处理大文件可能需要较长时间
需要其他功能(如裁剪、合并等)或调整参数,可以告诉我!
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播