Windows下使用FFmpeg,完成当前文件夹下多个MP4视频的拼接
目的
单纯进行视频时长拼接,不改变两段视频各自的分辨率、码率等一切信息。
一、安装 FFmpeg
方法1:Windows打开powershell,使用winget
命令安装FFmpeg
winget install ffmpeg
方法2:从GitHub Release中下载FFmpeg
国内点击ffmpeg-6.0-full_build.zip使用GitHub加速下载。
二、在Windows环境变量Path
中添加FFmpeg bin目录
2.1 使用winget
命令安装的
参考我的目录:
C:\Users\[用户名]\AppData\Local\Microsoft\WinGet\Packages\Gyan.FFmpeg_Microsoft.Winget.Source_8wekyb3d8bbwe\ffmpeg-6.0-full_build\bin
2.1 从GitHub下载的
将压缩包解压到一个你喜欢的目录下,再将对应的bin目录放入环境变量中即可
三、使用FFmpeg拼接
使用bat脚本完成此任务:脚本将使用ffmpeg将当前文件夹下所有mp4视频转换为ts格式,再拼接成一个mp4文件。
进入要拼接的视频文件夹,新建一个txt文件,粘贴以下内容:
@echo off
setlocal enabledelayedexpansion
set ffmpeg_path=ffmpeg.exe
set output_file=
echo Files to be converted:
for /f "delims=" %%a in ('dir /b /a-d "*.mp4"') do (
set file_path="%%~fa"
set file_name="%%~na"
set file_ext="%%~xa"
echo !file_name!!file_ext!
!ffmpeg_path! -i !file_path! -c copy -bsf:v h264_mp4toannexb -f mpegts !file_name!.ts
)
echo.
set /p output_file="Enter output file name: "
set /a count=0
(for /f "delims=" %%a in ('dir /b /a-d *.ts ^| sort') do (
set /a count+=1
echo file '%%~fa'
)) > list.txt
!ffmpeg_path! -f concat -safe 0 -i list.txt -c copy "%output_file%.mp4"
echo.
echo Successfully converted and concatenated %count% files.
echo Deleting temporary files...
for %%f in (*.ts) do (
del "%%f"
)
del list.txt
pause
保存后,把文件名后缀从.txt
修改为.bat
。
双击运行此脚本即可自动拼接当前目录下的所有mp4视频文件。
脚本中的变量ffmpeg_path用于设置ffmpeg.exe的路径,output_file用于保存用户输入的输出文件名。
首先,脚本会使用dir命令列出所有的mp4文件,并逐个使用ffmpeg将它们转换为ts格式。转换后的ts文件保存在和原始mp4文件相同的目录下,并以原始文件名为前缀,加上“.ts”为后缀。
然后,脚本会提示用户输入最后拼接得到的MP4文件名,并将所有的ts文件名按照Windows资源管理器的中文文件名名称排列顺序保存在list.txt文件中。最后,使用ffmpeg将所有的ts文件拼接成一个mp4文件,并将其保存为用户输入的文件名。
拼接完成后,会删除中间步骤生成的所有.ts文件和list.txt文件。删除临时文件的操作使用for循环遍历当前目录下的所有.ts文件,并使用del命令将它们逐个删除。最后,使用del命令删除list.txt文件。
删除操作完成后,脚本输出提示信息,并等待用户按下任意键终止脚本的执行。