markdown复制## 1. 项目背景与核心需求
最近在整理工作室的素材库时,发现积累的上千个视频文件格式杂乱无章——有MOV、AVI、MKV等各种封装格式,编码方式也各不相同。这种混乱导致剪辑软件频繁报错,团队协作时经常出现兼容性问题。更糟的是,某些老设备的拍摄素材在新型号电脑上直接无法播放。
这个Python脚本就是为了解决这个痛点而开发的。它能递归扫描指定文件夹下的所有视频文件,统一转码为H.264编码的MP4格式(保留原始音频流),并支持NVIDIA/AMD显卡的硬件加速。实测在RTX 3060显卡上,转码速度能达到纯CPU处理的5-8倍。
## 2. 技术方案设计
### 2.1 核心工具选型
选择FFmpeg作为底层转码引擎是经过多重考量的:
- 行业标准:超过90%的视频处理软件底层都使用FFmpeg
- 格式支持:几乎兼容所有已知的视频封装格式和编码格式
- 硬件加速:完美支持NVIDIA NVENC、AMD AMF等硬件编解码器
```python
# 检测可用硬件加速器的示例代码
import subprocess
def check_hw_accels():
result = subprocess.run(['ffmpeg', '-hwaccels'], capture_output=True, text=True)
return [line.strip() for line in result.stdout.split('\n') if line.strip()]
2.2 目录遍历策略
采用os.walk()递归扫描时特别注意:
- 跳过隐藏文件夹(以
.开头的目录) - 过滤非视频文件(通过扩展名和文件头双重验证)
- 保留原始目录结构(在输出路径中镜像原始层级)
重要提示:遇到文件名包含特殊字符(如空格、中文)时,必须用引号包裹路径,否则FFmpeg会解析失败
3. 核心实现细节
3.1 转码参数优化
经过上百次测试确定的黄金参数组合:
bash复制ffmpeg -hwaccel cuda -i input.mov -c:v h264_nvenc -preset p6 -tune hq \
-cq 23 -profile:v high -p
