一学就会的脚本实战指南
目录导读
- 为什么需要脚本转换视频音频编码?
- 常见编码格式与适用场景
- 环境搭建:必备工具与准备工作
- 核心脚本示例:FFmpeg一键批处理
- 进阶技巧:并行处理与质量参数调优
- 常见问题问答
为什么需要脚本转换视频音频编码?
在日常视频处理中,不同平台对编码格式有严格限制,某些播放器不支持HEVC(H.265),而部分社交媒体要求AAC音频,手动转换单个文件尚可,但面对数百个素材时,脚本化处理可节省90%以上的时间,通过编写脚本,你只需一条命令即可批量完成编码转换,同时避免人为操作失误。

常见编码格式与适用场景
| 视频编码 | 适用场景 | 音频编码 | 适用场景 |
|---|---|---|---|
| H.264 | 通用兼容,YouTube/B站 | AAC | 流媒体、iOS设备 |
| H.265 | 高压缩率,4K视频 | MP3 | 通用播放器 |
| VP9 | WebM格式,Chrome | FLAC | 无损存档 |
| AV1 | 新兴标准,Netflix | Opus | 实时通信 |
脚本转换的核心逻辑是:读取原文件 → 解码 → 重新编码为目标格式,FFmpeg通过-c:v和-c:a参数分别控制视频与音频编码器。
环境搭建:必备工具与准备工作
安装FFmpeg
- Windows: 下载编译版(gyan.dev/ffmpeg/builds/)添加至PATH。
- macOS:
brew install ffmpeg - Linux:
sudo apt install ffmpeg
验证安装
ffmpeg -version
输出应显示支持的编码器,如libx264、aac。
脚本语言选择
- Bash (Linux/macOS): 原生支持,适合服务器。
- PowerShell (Windows): 更好的管道与对象处理。
- Python: 跨平台,适合复杂逻辑。
核心脚本示例:FFmpeg一键批处理
案例1:批量转换视频为H.264+AAC
#!/bin/bash
# convert_h264_aac.sh
mkdir -p output
for file in *.mp4 *.mkv *.avi; do
[ -f "$file" ] || continue
filename="${file%.*}"
ffmpeg -i "$file" -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k "output/${filename}_h264.mp4"
done
echo "所有文件已转换至 output 文件夹。"
关键参数说明:
-preset medium: 平衡压缩速度与质量,可选ultrafast(快但体积大)至veryslow(慢但文件小)。-crf 23: 视频质量,0无损,23良好,51最差,建议18-28。-b:a 128k: 音频比特率,立体声通常128-192kbps足够。
案例2:仅转换音频编码(保持视频不变)
# convert_audio_only.ps1
New-Item -ItemType Directory -Force -Path "output"
Get-ChildItem -Filter *.mp4 | ForEach-Object {
$output = "output\" + $_.BaseName + "_aac.mp4"
ffmpeg -i $_.FullName -c:v copy -c:a aac -b:a 192k $output
}
Write-Host "音频编码转换完成。"
-c:v copy表示复制视频流,不重新编码,速度极快且无损。
进阶技巧:并行处理与质量参数调优
并行处理提升效率
对于多核CPU,使用GNU Parallel或PowerShell的ForEach-Object -Parallel:
# Linux/macOS
ls *.mp4 | parallel -j 4 ffmpeg -i {} -c:v libx264 -crf 23 {.}_h264.mp4
-j 4表示同时运行4个任务,建议设置为CPU核心数。
质量与文件大小的权衡
- 恒定质量模式(CRF):推荐用于存档,CRF值每±6,文件大小约±50%。
- 恒定比特率(CBR):用于流媒体,如
-b:v 5M表示5Mbps。 - 二步编码(2-pass):精确控制最终文件大小,但耗时加倍。
处理字幕与元数据
ffmpeg -i input.mkv -c:v libx264 -c:a aac -c:s mov_text -metadata title="我的视频" output.mp4
-c:s mov_text是MP4的字幕编码,-metadata等信息。
常见问题问答
问:脚本运行后提示“Unknown encoder 'libx264'”,怎么办?
答:FFmpeg可能未编译x264支持,检查ffmpeg -encoders | grep x264,若无,需重新安装包含x264的版本(如下载Full build版)。
问:为什么转换后视频画质变差?
答:可能CRF值过高(如>30)或使用了-preset ultrafast,推荐CRF设为18-22,预设用medium,确保原始素材未因多次转码而损失质量。
问:如何批量转换文件夹内的所有子文件夹?
答:使用find命令递归查找:
find /path/to/folder -name "*.mp4" -exec ffmpeg -i {} -c:v libx264 -crf 23 {}.h264.mp4 \;
注意:此方法会生成与原文件同目录的输出文件,更安全的做法是使用循环并输出到特定目录。
问:脚本转换时CPU占用100%,如何限制资源?
答:FFmpeg的-threads参数可控制线程数,例如-threads 2使用2线程,也可通过系统命令限制,如Linux下cpulimit或Windows的Set-ProcessPriority。
问:能否同时转换视频编码并调整分辨率?
答:可以,加上-vf scale=1280:720缩放至720p,或使用-vf "scale=-2:720"保持宽高比。
通过脚本自动化视频音频编码转换,你不仅节省了重复劳动,还能确保输出的一致性,从简单的Bash循环到支持并行处理的PowerShell脚本,每一步都可根据实际需求定制,掌握这些技巧后,即使是数TB的素材库,也能在数小时内完成编码更新,让你的工作流如丝般顺滑,立即动手,让脚本成为你视频处理的最佳伙伴。