如何使用FFmpeg将多个5秒短视频每3个拼接为一个15秒视频
FFmpeg批量每3个5秒短视频拼接为15秒视频自动化脚本
前置要求
- 所有待拼接的5秒短视频存放在同一个文件夹内,且视频的编码、分辨率、帧率、音频参数完全一致,避免拼接后出现花屏、音画不同步等异常
- 已正确安装FFmpeg并将其添加到系统环境变量,可直接在命令行/终端调用
ffmpeg命令
各系统实现脚本
Linux/macOS (Bash脚本)
- 将以下代码保存为
concat_videos.sh,放在待处理视频所在的文件夹中 - 给脚本添加执行权限:
chmod +x concat_videos.sh - 直接运行脚本即可自动完成分组拼接
#!/bin/bash # 配置项:可根据需要修改 INPUT_SUFFIX="mp4" # 输入视频后缀 GROUP_SIZE=3 # 每组拼接的视频数量 OUTPUT_PREFIX="合成视频_" # 输出文件前缀 # 按自然排序获取所有输入视频,存入数组 mapfile -t videos < <(ls -v *.${INPUT_SUFFIX}) total=${#videos[@]} # 分组处理 for ((i=0; i<total; i+=GROUP_SIZE)); do group=("${videos[@]:i:GROUP_SIZE}") group_num=$((i/GROUP_SIZE + 1)) list_file="temp_list_${group_num}.txt" # 生成FFmpeg concat格式的临时列表 > "$list_file" for vid in "${group[@]}"; do echo "file '$PWD/$vid'" >> "$list_file" done # 执行拼接,直接复制编码无质量损失、处理速度快 ffmpeg -f concat -safe 0 -i "$list_file" -c copy "${OUTPUT_PREFIX}${group_num}.mp4" -y # 删除临时列表文件 rm -f "$list_file" done
如果你的视频格式不是mp4,修改
INPUT_SUFFIX的取值即可;如果需要调整每组拼接的数量,修改GROUP_SIZE即可。
Windows (批处理脚本)
- 将以下代码保存为
concat_videos.bat,放在待处理视频所在的文件夹中 - 双击脚本即可自动完成分组拼接
@echo off setlocal enabledelayedexpansion :: 配置项:可根据需要修改 set INPUT_SUFFIX=mp4 set GROUP_SIZE=3 set OUTPUT_PREFIX=合成视频_ set /a count=0 set /a group_num=1 set list_file=temp_list_!group_num!.txt :: 遍历所有视频文件,分组处理 for /f "delims=" %%v in ('dir /b /on *.%INPUT_SUFFIX%') do ( if !count! equ 0 ( del /q !list_file! 2>nul ) echo file '%%~fv' >> !list_file! set /a count+=1 if !count! equ %GROUP_SIZE% ( ffmpeg -f concat -safe 0 -i !list_file! -c copy %OUTPUT_PREFIX%!group_num!.mp4 -y del /q !list_file! set /a count=0 set /a group_num+=1 set list_file=temp_list_!group_num!.txt ) ) :: 处理不足3个的剩余视频(如果不需要可以删除下面这段) if %count% gtr 0 ( ffmpeg -f concat -safe 0 -i !list_file! -c copy %OUTPUT_PREFIX%!group_num!.mp4 -y del /q !list_file! ) endlocal
脚本默认会处理不足3个的剩余视频,如果你不需要剩余不足3个的视频拼接,删除批处理最后面标注的对应代码段即可。
内容的提问来源于stack exchange,提问作者Данила Фадеичев
相关产品推荐
相关产品推荐

