FFmpeg Bash脚本多子文件夹合并编码路径问题解决
解决方案:GoPro视频批量压缩合并脚本(Mac OS终端)
下面是修正后的Bash脚本,完全匹配你的需求,解决了路径处理和输出命名的问题:
#!/bin/bash # 网络服务器的视频存储目录,确保已挂载且有写入权限 OUTPUT_DIR="/Volume/Server/Videos" # 遍历100GOPRO下所有以A开头的子文件夹 for dir in A*/; do # 提取纯文件夹名称(移除末尾的斜杠) folder_name="${dir%/}" # 进入目标子文件夹,若失败则跳过该文件夹 cd "$dir" || continue # 清理旧的file.txt(如果存在) rm -f file.txt # 生成当前文件夹的file.txt,仅包含当前目录下的MP4文件 for mp4_file in *.mp4; do echo "file '$mp4_file'" >> file.txt done # 调用FFmpeg合并并压缩视频,输出文件以文件夹命名 ffmpeg -f concat -safe 0 -i file.txt "$OUTPUT_DIR/${folder_name}.mp4" # 清理当前文件夹的临时file.txt rm -f file.txt # 返回上级目录(100GOPRO) cd .. done
关键修正说明
- 遍历对象调整:从遍历所有MP4文件改为遍历
A*/子文件夹,确保每个赛事文件夹单独处理 - 路径处理优化:用
${dir%/}移除文件夹路径末尾的斜杠,得到干净的文件夹名称(如A1) - 独立临时文件:在每个子文件夹内生成专属的
file.txt,避免跨文件夹的视频路径混入 - 输出命名匹配:直接用文件夹名作为输出MP4的文件名,确保
A1文件夹对应输出A1.mp4
可选优化建议
- 如果需要更高效的压缩,可以给FFmpeg添加编码参数,比如使用H.265编码减小体积:
ffmpeg -f concat -safe 0 -i file.txt -c:v libx265 -crf 28 -c:a aac "$OUTPUT_DIR/${folder_name}.mp4" - 确保FFmpeg已安装,Mac上可通过Homebrew安装:
brew install ffmpeg
内容的提问来源于stack exchange,提问作者NoobCoder
相关产品推荐
相关产品推荐

