一键批量修复视频文件:跨平台(Windows/Linux)FFmpeg 脚本指南

本文提供了两个分别用于 Windows 和 Linux 系统的傻瓜式脚本,用于快速批量 “修复” 或无损重新封装常见视频格式(MP4, MOV, AVI, MKV)。脚本会自动检查所需工具(FFmpeg),创建输出目录,并高效地处理当前文件夹下的所有视频文件,非常适合需要处理大量视频文件的用户。

脚本概述与功能

无论是从网上下载的视频碎片,还是相机、手机录制的文件,有时可能会遇到视频无法播放、卡顿或索引损坏的问题。使用 FFmpeg 进行 “无损重新封装”(即复制流而不重新编码)是修复这类问题的首选方法,它可以快速修复容器层面的错误,且不会损失任何视频画质。

这两个自动化脚本主要实现了以下功能:

  1. 环境检查:自动检测系统是否已安装必需的 FFmpeg 工具。
  2. 批量处理:自动遍历当前目录下的 .mp4, .mov, .avi, .mkv 格式视频文件。
  3. 无损处理:使用 -c copy 参数直接复制音视频流,处理速度极快,质量无损。
  4. 有序输出:自动创建 Fixed_Videos 文件夹存放处理后的文件,避免覆盖原文件。
  5. 友好提示:在命令行中显示详细的处理进度和最终结果。

Windows 批处理脚本 (.bat)

将以下代码保存为 Fix_Videos_Windows.bat,双击即可运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
echo Checking for FFmpeg...
ffmpeg -version >nul 2>nul
if errorlevel 1 (
echo Error: FFmpeg not found in PATH.
echo Please install FFmpeg and add it to your system PATH.
echo.
pause
exit /b 1
)

echo Creating output directory Fixed_Videos...
if not exist "Fixed_Videos" mkdir "Fixed_Videos"

echo Starting video processing...
echo.

for %% i in (*.mp4, *.mov, *.avi, *.mkv) do (
echo Processing: %% i
ffmpeg -i "%% i" -c copy "Fixed_Videos\%%~ni%%~xi" -y
echo Finished: %% i
echo.
)

echo All videos processed!
echo Check the "Fixed_Videos" folder for the results.
pause

使用步骤:

  1. 将上述代码复制到记事本中。
  2. 将文件另存为 Fix_Videos_Windows.bat,注意保存类型选择 “所有文件”。
  3. 将此批处理文件放入包含待处理视频文件的文件夹中。
  4. 双击运行,脚本会自动完成所有工作并在最后暂停,等待你按任意键退出。

Linux Shell 脚本 (.sh)

将以下代码保存为 fix_videos_linux.sh,在终端中运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash

echo "Checking for FFmpeg..."
if ! command -v ffmpeg &> /dev/null
then
echo "Error: FFmpeg not found. Please install FFmpeg first."
echo "You can install it with:"
echo " sudo apt install ffmpeg # For Ubuntu/Debian"
echo " sudo yum install ffmpeg # For CentOS/RHEL"
echo " sudo dnf install ffmpeg # For Fedora"
echo " brew install ffmpeg # For macOS"
exit 1
fi

echo "Creating output directory Fixed_Videos..."
mkdir -p "Fixed_Videos"

echo "Starting video processing..."
echo

for file in *.mp4 *.mov *.avi *.mkv; do
if [ -f "$file" ]; then
echo "Processing: $file"
ffmpeg -i "$file" -c copy "Fixed_Videos/$file" -y
echo "Finished: $file"
echo
fi
done

echo "All videos processed!"
echo "Check the 'Fixed_Videos' folder for the results."

使用步骤:

  1. 将上述代码保存到你的视频所在目录,文件名为 fix_videos_linux.sh
  2. 打开终端,导航到该目录。
  3. 为脚本添加执行权限:
    1
    chmod +x fix_videos_linux.sh
  4. 运行脚本:
    1
    ./fix_videos_linux.sh

安装必备工具:FFmpeg

如果脚本提示找不到 FFmpeg,请根据你的操作系统进行安装:

  • Windows:

    1. 访问 https://ffmpeg.org/download.html#build-windows
    2. 下载 ffmpeg-master-latest-win64-gpl.zip 静态版本。
    3. 解压 zip 文件,进入 bin 文件夹。
    4. bin 文件夹的完整路径(例如 C:\ffmpeg\bin)添加到系统的 PATH 环境变量中。
  • Ubuntu/Debian:

    1
    sudo apt update && sudo apt install ffmpeg
  • CentOS/RHEL/Fedora:

    1
    2
    3
    4
    5
    6
    # CentOS/RHEL 7+
    sudo yum install epel-release
    sudo yum install ffmpeg

    # Fedora
    sudo dnf install ffmpeg
  • macOS (使用 Homebrew):

    1
    brew install ffmpeg

安装完成后,重新打开命令行终端,运行 ffmpeg -version 确认安装成功。

注意事项

  • 并非万能:此脚本主要用于修复容器 / 索引错误。对于严重损坏的视频数据或编码错误,可能无法修复,可能需要尝试重新编码(-c:v libx264 等,但速度会慢很多)。
  • 文件覆盖:脚本中的 -y 参数会让 FFmpeg 自动覆盖输出目录中的同名文件。请确保原文件已备份。
  • 格式支持:脚本默认处理四种常见格式。你可以在循环语句中(如 for %% i in (...)for file in ...)自行添加或删除其他视频格式(如 .webm, .flv)。

希望这两个脚本能帮你节省大量重复操作的时间!如果有任何问题或建议,欢迎在评论区留言讨论。