ffmpeg-video-format
FFmpeg 视频格式转换
补充说明
本文提供全平台 FFmpeg 视频格式转换脚本,适配 Windows CMD / PowerShell / Linux / MacOS。支持主流视频格式互转、批量转换、音频提取、硬件加速编码。所有脚本可自动创建 Completed 文件夹存放成品,绝对不会覆盖、修改原始视频。
通用参数说明
-y:自动覆盖 Completed 内的同名成品文件(不影响原视频)-c:v libx264:H.264 软件编码器,兼容性最好-c:v libx265:H.265/HEVC 编码器,同等画质体积更小-c:a copy:直接复制音频流,不重新编码(速度快)-crf 23:H.264/H.265 质量参数,数值越小画质越高(0-51,默认 23)-preset fast:编码速度预设,可选ultrafast/superfast/veryfast/faster/fast/medium/slow/slower/veryslow
一、Windows CMD — 视频格式批量转换
自动创建 Completed 文件夹,支持 mp4/mkv/avi/mov/webm 等格式互转,原视频安全保留。
1. MP4 → 其他格式
md Completed 2>nul && for %i in (*.mp4 *.MP4) do ffmpeg -i "%i" -y -c:v libx264 -c:a aac "Completed\%~ni.mkv"
转换 MP4 为 MKV(H.264 + AAC 重编码)
md Completed 2>nul && for %i in (*.mp4 *.MP4) do ffmpeg -i "%i" -y -c:v libx264 -c:a mp3 "Completed\%~ni.avi"
转换 MP4 为 AVI(H.264 + MP3 重编码)
md Completed 2>nul && for %i in (*.mp4 *.MP4) do ffmpeg -i "%i" -y -c:v libx264 -c:a aac "Completed\%~ni.mov"
转换 MP4 为 MOV(H.264 + AAC 重编码)
2. MKV → 其他格式
md Completed 2>nul && for %i in (*.mkv *.MKV) do ffmpeg -i "%i" -y -c:v libx264 -c:a aac "Completed\%~ni.mp4"
转换 MKV 为 MP4(H.264 + AAC)
md Completed 2>nul && for %i in (*.mkv *.MKV) do ffmpeg -i "%i" -y -c:v libx264 -c:a mp3 "Completed\%~ni.avi"
转换 MKV 为 AVI(H.264 + MP3)
3. 其他格式 → MP4
md Completed 2>nul && for %i in (*.avi *.AVI *.mov *.MOV *.webm *.WEBM *.flv *.FLV *.m4v *.M4V) do ffmpeg -i "%i" -y -c:v libx264 -c:a aac "Completed\%~ni.mp4"
通用转 MP4 格式
4. H.264 → H.265 / HEVC 压缩(体积减少约 30-50%)
md Completed 2>nul && for %i in (*.mp4 *.MP4 *.mkv *.MKV) do ffmpeg -i "%i" -y -c:v libx265 -crf 28 -c:a copy "Completed\%~ni_hevc.mp4"
5. 视频 → 音频提取
md Completed 2>nul && for %i in (*.mp4 *.MP4 *.mkv *.MKV *.avi *.AVI *.mov *.MOV) do ffmpeg -i "%i" -y -vn -c:a mp3 -q:a 2 "Completed\%~ni.mp3"
提取音频为 MP3 格式
md Completed 2>nul && for %i in (*.mp4 *.MP4 *.mkv *.MKV *.avi *.AVI *.mov *.MOV) do ffmpeg -i "%i" -y -vn -c:a aac -b:a 192k "Completed\%~ni.m4a"
提取音频为 AAC 格式
二、Windows PowerShell — 视频格式批量转换
自动创建归档文件夹,全量批量转换,功能与 CMD 完全一致。
1. MP4 → 其他格式
if (!(Test-Path "Completed")) { New-Item -ItemType Directory -Path "Completed" | Out-Null }
Get-ChildItem *.mp4, *.MP4 | % { ffmpeg -i $_.FullName -y -c:v libx264 -c:a aac "Completed\$($_.BaseName).mkv" }
2. MKV → 其他格式
if (!(Test-Path "Completed")) { New-Item -ItemType Directory -Path "Completed" | Out-Null }
Get-ChildItem *.mkv, *.MKV | % { ffmpeg -i $_.FullName -y -c:v libx264 -c:a aac "Completed\$($_.BaseName).mp4" }
3. 通用格式 → MP4
if (!(Test-Path "Completed")) { New-Item -ItemType Directory -Path "Completed" | Out-Null }
Get-ChildItem *.mp4, *.MP4, *.avi, *.AVI, *.mov, *.MOV, *.webm, *.WEBM, *.flv, *.FLV, *.m4v, *.M4V | % { ffmpeg -i $_.FullName -y -c:v libx264 -c:a aac "Completed\$($_.BaseName).mp4" }
4. H.264 → H.265 / HEVC 压缩
if (!(Test-Path "Completed")) { New-Item -ItemType Directory -Path "Completed" | Out-Null }
Get-ChildItem *.mp4, *.MP4, *.mkv, *.MKV | % { ffmpeg -i $_.FullName -y -c:v libx265 -crf 28 -c:a copy "Completed\$($_.BaseName)_hevc.mp4" }
5. 音频提取
if (!(Test-Path "Completed")) { New-Item -ItemType Directory -Path "Completed" | Out-Null }
Get-ChildItem *.mp4, *.MP4, *.mkv, *.MKV, *.avi, *.AVI, *.mov, *.MOV | % { ffmpeg -i $_.FullName -y -vn -c:a mp3 -q:a 2 "Completed\$($_.BaseName).mp3" }
三、Linux / MacOS — 视频格式批量转换
通用 Bash 脚本,自动创建归档目录,跨系统通用。
1. MP4 → 其他格式
mkdir -p Completed && for file in *.mp4 *.MP4; do ffmpeg -i "$file" -y -c:v libx264 -c:a aac "Completed/${file%.*}.mkv"; done
2. MKV → 其他格式
mkdir -p Completed && for file in *.mkv *.MKV; do ffmpeg -i "$file" -y -c:v libx264 -c:a aac "Completed/${file%.*}.mp4"; done
3. 通用格式 → MP4
mkdir -p Completed && for file in *.mp4 *.MP4 *.avi *.AVI *.mov *.MOV *.webm *.WEBM *.flv *.FLV *.m4v *.M4V; do ffmpeg -i "$file" -y -c:v libx264 -c:a aac "Completed/${file%.*}.mp4"; done
4. H.264 → H.265 / HEVC 压缩
mkdir -p Completed && for file in *.mp4 *.MP4 *.mkv *.MKV; do ffmpeg -i "$file" -y -c:v libx265 -crf 28 -c:a copy "Completed/${file%.*}_hevc.mp4"; done
5. 视频 → 音频提取
mkdir -p Completed && for file in *.mp4 *.MP4 *.mkv *.MKV *.avi *.AVI *.mov *.MOV; do ffmpeg -i "$file" -y -vn -c:a mp3 -q:a 2 "Completed/${file%.*}.mp3"; done
6. 硬件加速编码(NVIDIA NVENC)
mkdir -p Completed && for file in *.mp4 *.MP4; do ffmpeg -i "$file" -y -c:v h264_nvenc -preset p4 -cq 23 -c:a aac "Completed/${file%.*}_nvenc.mp4"; done
四、编码格式对照表
| 编码器 | 容器格式 | 兼容性 | 体积 | 画质 | 编码速度 |
|---|---|---|---|---|---|
libx264 |
mp4/mkv/mov/avi | 极好(几乎所有设备) | 较大 | 优秀 | 中等 |
libx265 |
mp4/mkv | 较好(现代设备) | 比 H.264 小 30-50% | 优秀 | 慢 |
h264_nvenc |
mp4 | 好(需 NVIDIA 显卡) | 较大 | 良好 | 极快 |
h265_nvenc |
mp4 | 较好(需 NVIDIA 显卡) | 中等 | 良好 | 极快 |
libvpx-vp9 |
webm | 一般(浏览器支持好) | 极小 | 良好 | 极慢 |
libaom-av1 |
mp4/mkv | 较差(仅最新设备) | 最小 | 优秀 | 极慢 |
五、CRF 质量参数对照表
参数说明:取值范围 0 ~ 51(H.264/H.265 通用)。数值越小,画质越高、文件体积越大;0 为无损,51 为最差。建议范围 18~28。
| CRF 值 | 画质表现 | 适用场景 |
|---|---|---|
| 18 | 视觉无损,体积较大 | 高清存档、母带备份 |
| 20 | 极佳画质,几乎无损耗 | 高质量视频归档 |
| 23 | 优秀画质,良好体积均衡 | 默认值,日常使用 |
| 25 | 良好画质,体积适中 | 网络传输、在线分享 |
| 28 | 可接受画质,体积较小 | 移动设备、大文件压缩 |
| 30 | 画质下降明显 | 临时存储、低码率分发 |
| 35 | 画质损失较大 | 极限压缩、存档缩略 |
六、功能说明
- 自动创建目录:所有平台脚本自动生成 Completed 文件夹,无需手动新建,重复执行不会报错
- 原视频绝对保护:所有操作仅读取原视频,成品统一输出至子文件夹,永不覆盖、损坏源文件
- 同名文件兼容:默认开启
-y参数,自动覆盖成品目录同名文件,删除该参数可开启覆盖确认提示 - 格式全覆盖:支持 mp4/mkv/avi/mov/webm/flv/m4v 主流视频格式互转
- 硬件加速:NVIDIA NVENC 用户可使用 h264_nvenc/h265_nvenc 编码器,显著提升编码速度(见 Linux §6)