FFmpeg 按文件夹内自然排序合并视频:自动生成 list.txt + 一键合并

Gemini_Generated_Image_c0hv8uc0hv8uc0hv

打开视频文件夹,右键 → 在此处打开 PowerShell 窗口,复制下面整套代码直接运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 清空旧列表文件
Remove-Item list.txt -ErrorAction SilentlyContinue
# 初始化序号
$num = 1
# 遍历所有mp4文件,按文件名排序并重命名
Get-ChildItem *.mp4 | Sort-Object Name | ForEach-Object {
$newName = "$num.mp4"
Rename-Item -Path $_.FullName -NewName $newName
Write-Host "已重命名:$($_.Name) → $newName"
$num += 1
}
# 生成 ffmpeg concat 列表(使用兼容编码 utf8,PS5.1 可用)
Get-ChildItem *.mp4 | Sort-Object {[int]$_.BaseName} | ForEach-Object {
"file '$($_.Name)'" | Out-File list.txt -Encoding utf8 -Append
}
Write-Host "`n重命名完成,已生成list.txt,直接执行合并命令:"
Write-Host "ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4"

执行后效果:

所有中文、空格、特殊符号文件名全部替换成纯数字:1.mp42.mp43.mp4,不存在任何编码解析错误。

兜底极简方案(ASCII 编码,不会有 BOM,兼容性极强)

1
2
Get-ChildItem *.mp4 | Sort-Object {[int]$_.BaseName} | ForEach-Object { "file '$($_.Name)'" } | Out-File list.txt -Encoding ASCII
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

ASCII 编码不含任何 BOM 标记,ffmpeg 读取完全正常,缺点:文件名仅英文数字无中文时完美;如果你的视频文件名带中文,优先用方案 B。

1
2
Get-ChildItem *.mp4 | Sort-Object {[int]$_.BaseName} | ForEach-Object { "file '$($_.Name)'" } | Out-File list.txt -Encoding ASCII
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

原理:把文件列表直接通过管道传给 ffmpeg,全程不落地成文本文件,自然不存在 BOM 隐藏字符报错。