本文目录导读:

- 方法一:使用 FFmpeg + Shell 脚本 (Linux/Mac)
- 方法二:Python 脚本(跨平台)
- 方法三:批量提取多个时间点缩略图
- 方法四:使用 Node.js 脚本
- 安装 FFmpeg
- 常用参数说明
- 进阶:带进度显示
可以使用 FFmpeg 配合脚本来批量提取视频缩略图,以下是几种常用方法:
使用 FFmpeg + Shell 脚本 (Linux/Mac)
#!/bin/bash
# 批量提取缩略图脚本
# 设置输出目录
output_dir="thumbnails"
mkdir -p "$output_dir"
# 遍历所有视频文件
for video in *.mp4 *.avi *.mov *.mkv; do
if [ -f "$video" ]; then
# 提取第5秒的缩略图
ffmpeg -i "$video" -ss 00:00:05 -vframes 1 "$output_dir/${video%.*}_thumb.jpg"
echo "已提取: $video"
fi
done
Python 脚本(跨平台)
import os
import subprocess
from pathlib import Path
def extract_thumbnails(video_dir, output_dir="thumbnails", time_point="00:00:05"):
"""批量提取视频缩略图"""
# 创建输出目录
Path(output_dir).mkdir(exist_ok=True)
# 支持的视频格式
video_extensions = ('.mp4', '.avi', '.mov', '.mkv', '.wmv', '.flv')
# 遍历目录
for video_file in Path(video_dir).glob('*'):
if video_file.suffix.lower() in video_extensions:
output_name = f"{video_file.stem}_thumb.jpg"
output_path = Path(output_dir) / output_name
# FFmpeg命令
cmd = [
'ffmpeg',
'-i', str(video_file),
'-ss', time_point,
'-vframes', '1',
str(output_path)
]
try:
subprocess.run(cmd, check=True, capture_output=True)
print(f"已提取: {video_file.name}")
except subprocess.CalledProcessError as e:
print(f"提取失败: {video_file.name} - {e.stderr.decode()}")
# 使用示例
extract_thumbnails("./videos") # 批量处理videos文件夹下的所有视频
批量提取多个时间点缩略图
#!/bin/bash
# 提取多个时间点的缩略图
output_dir="thumbnails_multi"
mkdir -p "$output_dir"
for video in *.mp4; do
if [ -f "$video" ]; then
basename="${video%.*}"
# 提取第5秒、10秒、30秒的缩略图
for time in "00:00:05" "00:00:10" "00:00:30"; do
time_formatted=$(echo $time | tr ':' '_')
ffmpeg -i "$video" -ss "$time" -vframes 1 "$output_dir/${basename}_${time_formatted}.jpg"
done
echo "已完成: $video"
fi
done
使用 Node.js 脚本
const { exec } = require('child_process');
const fs = require('fs');
const path = require('path');
async function extractThumbnails(videoDir, outputDir = './thumbnails') {
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir);
}
const videoExts = ['.mp4', '.avi', '.mov', '.mkv'];
const files = fs.readdirSync(videoDir);
for (const file of files) {
const ext = path.extname(file).toLowerCase();
if (videoExts.includes(ext)) {
const inputPath = path.join(videoDir, file);
const outputPath = path.join(outputDir, `${path.basename(file, ext)}_thumb.jpg`);
const command = `ffmpeg -i "${inputPath}" -ss 00:00:05 -vframes 1 "${outputPath}"`;
try {
await new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if (error) reject(error);
else resolve();
});
});
console.log(`已提取: ${file}`);
} catch (error) {
console.error(`提取失败: ${file} - ${error.message}`);
}
}
}
}
// 使用
extractThumbnails('./videos');
安装 FFmpeg
如果还没有安装 FFmpeg:
- Ubuntu/Debian:
sudo apt install ffmpeg - Mac:
brew install ffmpeg - Windows: 从 ffmpeg.org 下载
常用参数说明
| 参数 | 说明 |
|---|---|
-i |
输入文件 |
-ss |
起始时间(格式:HH:MM:SS) |
-vframes |
提取的帧数 |
-s |
设置缩略图尺寸(如 320x240) |
-q:v |
输出质量(2-31,数值越小质量越高) |
进阶:带进度显示
#!/bin/bash
# 带进度显示的批量提取
total=$(ls *.mp4 2>/dev/null | wc -l)
count=0
for video in *.mp4; do
count=$((count + 1))
echo "[$count/$total] 正在处理: $video"
ffmpeg -i "$video" -ss 00:00:05 -vframes 1 "${video%.*}_thumb.jpg" -hide_banner -loglevel error
done
echo "处理完成!"
这些脚本会自动处理整个文件夹中的视频文件,提取指定时间点的缩略图,根据您的需求调整 -ss 参数来改变提取的时间点。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播