# 有没有MOV批量转MP4格式的工具。批量！

**URL:** <https://meta.appinn.net/t/topic/85374>\
**Category:** 问题求助\
**Tags:** windows\
**Created:** [2026 年5 月 14 日 03:38 UTC](https://meta.appinn.net/t/topic/85374 "2026-05-14T03:38:22Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

作者： ![honey](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/h/a4c791/32.png) [@honey](https://meta.appinn.net/u/honey)\
发布日期： [2026 年5 月 14 日 03:38 UTC](https://meta.appinn.net/t/topic/85374/1 "2026-05-14T03:38:22Z")

</div>

有没有MOV批量转MP4格式的工具。批量！

win用。

---

<div class="post-metadata">

作者： ![VictoryRoad](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/victoryroad/32/58964_2.png) [@VictoryRoad](https://meta.appinn.net/u/VictoryRoad)\
发布日期： [2026 年5 月 14 日 03:41 UTC](https://meta.appinn.net/t/topic/85374/2 "2026-05-14T03:41:13Z")

</div>

HandBrake 应该能行：

> **[HandBrake: Open Source Video Transcoder](https://handbrake.fr/)**
>
> HandBrake is an open-source, GPL-licensed, multiplatform, multithreaded video transcoder.

---

<div class="post-metadata">

作者： ![SomeoneAtAppinn](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@SomeoneAtAppinn](https://meta.appinn.net/u/SomeoneAtAppinn)\
发布日期： [2026 年5 月 14 日 03:48 UTC](https://meta.appinn.net/t/topic/85374/3 "2026-05-14T03:48:47Z")

</div>

以前让AI写过ffmpeg的Powershell模板，拿去改改输出参数就行了。

禁忌事项：

- intel qsv 选项开启时，若与libopus音频编码器同时使用，则必须将用于质量控制的global\_quality写作`global_quality:v`
- 输出路径不要放在输入路径下，否则可能会引发无限嵌套转换
- 其他与intel QSV冲突的ffmpeg参数，因为我没怎么用过，所以印象不深，但是我知道还有一些，遇到问题的话，首选搜索reddit，次选搜索github或其他社区
- ffmpeg无法正确处理 32bit float 格式的很多音频，但是好在视频没人用这么高规格的音轨

> ****
>
> ```powershell
> param(
> [Parameter(Mandatory=$true)]
> [string]$InputDir,
> 
> [Parameter(Mandatory=$true)]
> [string]$OutputDir,
> 
> [Parameter(Mandatory=$false)]
> [string]$FFmpegPath = "D:\Program\ffmpeg\bin\ffmpeg.exe"
> )
> 
> # ===============================
> # 基础检查
> # ===============================
> 
> if (!(Test-Path $InputDir)) {
> Write-Error "输入目录不存在: $InputDir"
> exit 1
> }
> 
> if (!(Test-Path $OutputDir)) {
> Write-Host "输出目录不存在，正在创建: $OutputDir"
> New-Item -ItemType Directory -Path $OutputDir | Out-Null
> }
> 
> # 检查 FFmpeg 路径
> if (-not $FFmpegPath) {
> $FFmpegPath = Read-Host "请输入 ffmpeg 二进制文件的路径 (例如：C:\Program Files\ffmpeg\bin\ffmpeg.exe)"
> }
> 
> # 去掉路径两侧的引号
> $FFmpegPath = $FFmpegPath.Trim('"')
> 
> # 检查 ffmpeg 是否存在
> if (!(Test-Path $FFmpegPath)) {
> Write-Error "指定的 FFmpeg 路径不存在: $FFmpegPath"
> exit 1
> }
> 
> # 日志文件
> $logFile = Join-Path $OutputDir ("ffmpeg_log_" + (Get-Date -Format "yyyyMMdd_HHmmss") + ".txt")
> 
> function Write-Log {
> param([string]$Message)
> 
> $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
> $line = "[$timestamp] $Message"
> 
> Write-Host $line
> Add-Content -Path $logFile -Value $line
> }
> 
> Write-Log "========== 开始批量转码 =========="
> Write-Log "输入目录: $InputDir"
> Write-Log "输出目录: $OutputDir"
> Write-Log "FFmpeg 路径: $FFmpegPath"
> 
> # 支持扩展名
> $extensions = ".mp4",".mkv",".avi",".mov",".flv",".wmv"
> 
> $success = 0
> $failed = 0
> $skipped = 0
> 
> # ===============================
> # 开始递归遍历
> # ===============================
> 
> Get-ChildItem -Path $InputDir -Recurse -File | 
> Where-Object { $extensions -contains $_.Extension.ToLower() } |
> ForEach-Object {
> 
> $inputFile = $_.FullName
> 
> # 计算相对路径
> $relativePath = $inputFile.Substring($InputDir.Length).TrimStart("\","/")
> $relativeDir = Split-Path $relativePath -Parent
> 
> # 输出目录保持结构
> $targetDir = Join-Path $OutputDir $relativeDir
> 
> if (!(Test-Path $targetDir)) {
> New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
> }
> 
> # 拼接输出文件名
> $outputFileName = $_.BaseName + $_.Extension
> $outputFile = Join-Path $targetDir $outputFileName
> 
> # 已存在则跳过
> if (Test-Path $outputFile) {
> Write-Log "跳过(已存在): $outputFile"
> $skipped++
> return
> }
> 
> Write-Log "开始处理:"
> Write-Log "输入: $inputFile"
> Write-Log "输出: $outputFile"
> 
> # ====== 关键安全调用方式 ======
> $ffmpegArgs = @(
> "-y"
> "-i", $inputFile
> "-c:v", "libx264"
> "-preset", "medium"
> "-crf", "23"
> "-c:a", "opus"
> "-b:a", "192k"
> $outputFile
> )
> 
> # 使用 & 调用，路径带引号处理
> & $FFmpegPath @ffmpegArgs 2>&1 | ForEach-Object {
> Add-Content -Path $logFile -Value $_
> }
> 
> if ($LASTEXITCODE -ne 0) {
> Write-Log "处理失败: $inputFile"
> $failed++
> }
> else {
> Write-Log "完成: $outputFile"
> $success++
> }
> 
> Write-Log "----------------------------------------"
> }
> 
> # ===============================
> # 统计信息
> # ===============================
> 
> Write-Log "========== 全部完成 =========="
> Write-Log "成功: $success"
> Write-Log "失败: $failed"
> Write-Log "跳过: $skipped"
> Write-Log "日志文件: $logFile"
> 
> ```

---

<div class="post-metadata">

作者： ![Colin5887](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/colin5887/32/59253_2.png) [@Colin5887](https://meta.appinn.net/u/Colin5887)\
发布日期： [2026 年5 月 14 日 03:50 UTC](https://meta.appinn.net/t/topic/85374/4 "2026-05-14T03:50:27Z")

</div>

ffmpeg，或者各种ffmpeg的套皮，视频处理基本都绕不开这个东西

楼上两个，一个是ffmpeg的套皮，另一个是ffmpeg的脚本。

---

<div class="post-metadata">

作者： ![Qingwa](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/qingwa/32/58632_2.png) [@Qingwa](https://meta.appinn.net/u/Qingwa)\
发布日期： [2026 年5 月 14 日 05:45 UTC](https://meta.appinn.net/t/topic/85374/5 "2026-05-14T05:45:52Z")

</div>

ffmpeg 最简单了吧。

---

<div class="post-metadata">

作者： ![VictoryRoad](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/victoryroad/32/58964_2.png) [@VictoryRoad](https://meta.appinn.net/u/VictoryRoad)\
发布日期： [2026 年5 月 14 日 05:49 UTC](https://meta.appinn.net/t/topic/85374/6 "2026-05-14T05:49:58Z")

</div>

FFmpeg 从功能上讲最为强大，而且现在有 AI 辅助，写一个批量转换的脚本也不是难事。

即使放在过去没有 AI 的时候，其实也有很多通俗易懂的教程，照着这些教程也能完成基本操作：

> **[FFmpeg 视频处理入门教程 - 阮一峰的网络日志](https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html)**

但个人很多时候不是很愿意直接推荐 FFmpeg，因为我不知道提问者是否有操作命令行、脚本的能力。甚至可能很多人连怎么安装 FFmpeg 都不知道。如果不具备这些基础知识，那么即使有 AI 帮忙写脚本也很难进行下去，莫不如直接推荐个好用的 GUI，好歹操作上更直观。

---

<div class="post-metadata">

作者： ![jark006](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/jark006/32/58289_2.png) [@jark006](https://meta.appinn.net/u/jark006)\
发布日期： [2026 年5 月 14 日 06:17 UTC](https://meta.appinn.net/t/topic/85374/7 "2026-05-14T06:17:17Z")

</div>

FFmpeg就挺好的，我之前整理历年积累拍的照片/视频时，嫌视频大，就写了个小工具调用FFmpeg批量转到AV1编码的mp4，把整个文件夹或多个视频文件拖到exe图标上即可（实际就是用这个exe打开这些文件），可自定义转码参数（内置了几条CPU/A卡加速的转码参数，N卡要自己填参数，拿参考示例去找AI问问即可）

> **[GitHub - jark006/ffmpegConvert: 使用 ffmpeg 给视频批量转到 H265/AV1 编码格式](https://github.com/jark006/ffmpegConvert)**
>
> 使用 ffmpeg 给视频批量转到 H265/AV1 编码格式

下载 ffmpeg-git-full.7z 解压出 FFmpeg.exe 放一起就行

> **[Builds - CODEX FFMPEG @ gyan.dev](https://www.gyan.dev/ffmpeg/builds/)**

---

<div class="post-metadata">

作者： ![kli2018](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/kli2018/32/22935_2.png) [@kli2018](https://meta.appinn.net/u/kli2018)\
发布日期： [2026 年5 月 14 日 10:55 UTC](https://meta.appinn.net/t/topic/85374/8 "2026-05-14T10:55:52Z")

</div>

都是FFmpeg的壳,我也分享个python脚本,最近刚找ai搓的

行数太大了发不出来,下面是我的小网盘

> **[永硕E盘](https://klishare.ysepan.com/)**
>
> 永硕E盘　专业网络硬盘　－－数据存储、交流平台,可以保存您的文件、网址、记事等。以便随时随地调用或与朋友、同事分享

访问密码是: **1234**

系统安装了python的下载 FFmpeg简易转换合并.pyw 运行

预设文件 ffmpeg\_presets 下不下都无所谓,只是演示一些参数怎么填

不想安装python可以下载我找github自动编译好的FFmpeg简易转换合并.exe

FFmpeg我也去官网下载了最新的share版本上传到网盘了,下载后解压到脚本/程序同目录

或者配置到环境变量里(新手忽略这句话)

share版本的ffmpeg ffplay ffprobe公用运行库,所以体积小点,就是文件比较零碎,单文件的每个都单独包含了运行库,加起来会很大,这个脚本我用了FF全家桶,所以share版划算点

因为是找ai搓的,我自己也只刚测试了半个月,有啥问题我也不知道,不过对于mov批量转mp4还是能对付的

打开脚本/程序后, 点击上半那些选项配置好参数模版,把你要批量转换的文件拖进去,就会按模版创建到下面的列表

下面列表表头上显示数量的框,前面是总数量,如果选的cpu软编码,你可以按你cpu性能选数量,最好不超过3,

后面是显示硬件编码的数量,如果你选的硬件编码,如果超过2个,文件可能会在显卡内存里打架,所以不要超过2

列表选择文件双击还可以微调

2个大按钮是单个文件转换按钮,必须在上面选择输入文件

下面队列的按钮是管队列的

第一页的功能感觉解决了HandBrake90%

**像素格式记得点击取消一下,我默认的是有损的,因为我转换需求是为了传手机看**

* * *

第二页的功能类似mkvtoolnix,不过这个只模仿了30%,对于轨道的默认 语言 那些没有处理,就是简单的多流合并,可以无损复制,也可以转换一下编码,

这个功能主要是为了解决一下网站视频下载下来是音频视频分开2个文件的合并问题,所以没深入挖掘功能

画中画功能的初衷是舞台多机位合并, 画中画的主从视频必须选编码格式重新编码,而不能用copy无损复制了

可以在主视频的预览里看到从视频的位置演示框, 主视频偏移功能是为了全舞台给竖舞台让点位置,比如-100就向左边让100,点了偏移功能后必须获取一下主视频的大小,

主视频的偏移在预览里看不到,编码后是能体现的

这一页也支持拖拽,多个文件,点击选择一个作为主视频流,或者选all,全部作为从音频流,画中画的视频是用画中画按钮添加
