一个功能完备的 Bash 脚本,用于将常见视频格式批量转换为 ProRes、H.264 / H.265 (NVENC) 或 DNxHD 等专业编码,支持 GPU 硬件加速、多任务并行处理、交互式配置与实时进度反馈。适用于视频剪辑、归档、跨平台兼容性转换等场景。
-
多种输出编码格式
支持 ProRes 422 HQ、DNxHD(CPU 编码),以及 H.264/H.265 无损或高质量 NVENC(NVIDIA GPU 编码)。 -
硬件加速解码与编码
- 检测 NVIDIA GPU 并自动启用 CUDA 解码(ProRes/DNxHD 时)
- NVENC 编码时使用 GPU 编码器,解码回退至 CPU 以避免格式兼容性问题
-
灵活的音频处理
可选复制原始音轨(无需重新编码)或转码为 PCM、AAC、MP3、AC‑3 等多种格式。 -
交互式操作
- 启动时询问输出目录
- 支持当前目录下覆盖原文件或重命名输出(_Export 后缀)
- 首次选择后,后续文件自动沿用相同操作。
-
并行批量处理
可指定同时转换的文件数量(默认 1),充分利用多核 CPU 和多路 NVENC 引擎。 -
实时进度显示
- 串行模式下显示整体进度条、已用时间、估算剩余时间
- 并行模式下每个文件独立显示百分比进度
-
扩展性
支持输入扩展名:.mov .mp4 .mkv .avi .m4v .3gp .flv .wmv .webm .mpeg .mpg(不区分大小写)
-
操作系统:Linux(Ubuntu 20.04+,等发行版)
-
依赖软件:
- ffmpeg(含 ffprobe) – 推荐使用版本 4.0 以上
- bc – 用于浮点数计算
- bash 4.0 以上
git clone https://github.com/chenmaonn/Linux-Video-Transcoding-Script.git
cd Linux-Video-Transcoding-Script
chmod +x Convert.sh您也可以直接将 Convert.sh 复制到您的 PATH 目录下使用。
##使用方法 进入存放待转换视频的目录,运行脚本:
./Convert.sh随后按照交互提示操作:
-
输出目录
输入转换后文件的存放路径(直接回车使用当前目录)。 -
视频编码
从列表中选择目标编码格式(例如1为 ProRes,2为 H.264 无损 NVENC)。 -
音频处理
选择音频编码或直接复制原始音轨(如1为复制)。 -
并行任务数
输入同时转换的文件数量(默认 1),若输入大于 1 则启用并行模式。 -
操作模式 (若输出目录为当前目录)
- 输入
o或直接回车:覆盖原文件(会删除原始文件) - 输入
r:重命名输出文件(在文件名后添加_Export,原文件保留)
若输出目录不同于当前目录,则默认覆盖(原文件始终保留)。
- 输入
之后脚本将自动处理目录下所有支持的视频文件,并在每个文件转换期间显示进度。
- 复制源音轨:直接拷贝原始音频流,不重新编码,速度快且无损。
- PCM 无损:转为未压缩的线性 PCM,兼容性优秀但文件大。
- AAC 192k:高质量有损音频,适合大部分分发场景。
- MP3 320k:兼容性广,品质较高。
- AC‑3 448k:杜比数字环绕声,常用于影音文件。
- 当并行数大于 1 时,脚本会同时启动多个 ffmpeg 进程。
- 每个文件独立显示百分比进度,最终汇总成功与失败计数。
- 建议根据 CPU 核心数和 GPU 编码引擎数量合理设置并行数(例如 RTX 30 系列可支持 2~3 路 NVENC 并行)。
- 覆盖模式会删除原文件,请确保已备份重要数据。
- NVENC 编码时,脚本自动禁用 GPU 解码以避免兼容性问题,此时解码由 CPU 承担,但编码仍由 GPU 负责,整体性能通常仍优于纯 CPU 方案。
- 若输入文件像素格式与编码器要求不符,脚本会自动添加格式转换滤镜(例如 ProRes 需要
yuva444p10le)。 - 并行任务数过高可能导致系统资源耗尽,请根据实际硬件谨慎设置。
- 如果转换失败,脚本会在终端输出 FFmpeg 的具体错误信息。
##自定义与扩展
- 您可以修改脚本顶部的
extensions数组来增减支持的输入文件后缀名。 - 也可以调整视频编码参数(如
-cq值、-preset等级)以平衡速度与质量。
欢迎提交 Issue 或 Pull Request。若您发现兼容性问题或有改进建议,请附上 FFmpeg 版本、GPU 型号及错误日志。