Windows下使用FFmpeg,完成当前文件夹下多个MP4视频的拼接

目的

单纯进行视频时长拼接,不改变两段视频各自的分辨率、码率等一切信息。

一、安装 FFmpeg

方法1:Windows打开powershell,使用winget命令安装FFmpeg

winget install ffmpeg

方法2:从GitHub Release中下载FFmpeg

国内点击ffmpeg-6.0-full_build.zip使用GitHub加速下载。
image

二、在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
image

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文件。
删除操作完成后,脚本输出提示信息,并等待用户按下任意键终止脚本的执行。

posted @ 2023-03-03 15:08  云吱  阅读(1737)  评论(1编辑  收藏  举报