#!/bin/bash
clear
read -p "请输入视频格式后缀[比如 mkv 或者 mp4]:"
videotype=$REPLY
read -p "请输入字幕格式后缀[比如 ass 或者 srt]:"
subtype=$REPLY
read -p "请输入字幕信息[比如制作字幕的字幕组或者语言信息,示例 白月字幕组简体中文(Simplified Chinese) ]:"
subinfo=$REPLY
read -p "请输入输出文件夹路径[输出文件夹路径请不要设置成当前文件夹或者当前文件夹的子文件夹]:"
outputtotaldir=$REPLY
find . -type d -exec mkdir -p $outputtotaldir/\{\} \; # 在输出文件夹建立与当前文件夹内一模一样的目录结构
find . -type f -name "*.$videotype" -print0 | while read -r -d "" video # 查找所有.mkv 的视频文件并逐个将文件名写入$video 参数
do
prevideo="${video#*/}" # 去掉$video 路径里面最左边的 /以及 /左边的字符
subtitle="$(echo "$video" | sed "s/.$videotype$/.$subtype/")" # 用 sed 命令将$line 参数里"xxx xxx.mkv"的文件名转换成 jpg 结尾"xxx xxx.ass"
output="$outputtotaldir/$(echo "$prevideo" | sed "s/.$videotype$/[chs\&eng].mkv/")"
ffmpeg -i "$video" -i "$subtitle" -map 0:v -map 0:a -map 1:s -metadata:s:s:0 language="$subinfo" -metadata:s:s:0 title="$subinfo" -c copy "$output"
done
自己写的一个简单 bash 脚本,就是想批量处理下视频省点力气。结果不知道为什么,这个脚本对零星几个视频文件执行起来一点错误也没有。但是视频数量一多,比如这批正在处理的 100 多个视频文件,就会时不时跳出来错误。
而且错误原因全是 ffmpeg 的 input 被输入了不存在的文件路径,咱认为是管道传递过去的文件路径缺失不完整,但是完全不知道是什么原因,也不知道怎么修。。。报错的截图如下,求大佬们帮忙看下 https://s2.loli.net/2022/01/13/M58vsOBHWP6eSQI.jpg https://s2.loli.net/2022/01/13/xgZ6RwYmTSyvbQH.png https://s2.loli.net/2022/01/13/oKNkR1y3eGXnOLT.png
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.