特别注意:因为懒所以懒,做个shell一键执行。
1.建立个文本,改个扩展名shell.sh,复制下面代码-保存。
打开终端(建议直接root用戶运行)。
2.sudo chmod +x sheell.sh
3.sudo ./shell.sh 视频名.xxx (使用运行即可)
4.完成的文件在finish文件夹里
5.用法 shell.sh 视频名.xxx 注意这2个文件放在同一个文件夹里
6.这是我想了很久决定这样做一下。
7.输入默认需要的音轨,其余音轨 依次下落
8.测试环境 centos7 其他linux 应该也能用
#!/bin/bash
##i-bash是标准的shell标头
##i-
##i-判断文件目录是否存在,不存在就创建
if [ ! -d "finish" ];then
mkdir finish
chmod -R 777 finish
#else
#echo 'finis文件夹存在'
fi
##获取当前目录的函数
axdir=$(cd $(dirname $0); pwd)
##i-读取命令返回值写入文本
touch merge.txt
echo ' '>merge.txt
##读取运行命令的返回值
check_results=`ffmpeg -i $1 2>&1`
for i in $check_results
do
sed -i '$a'"$i" merge.txt
done
##建立新文本
touch 1.txt
##建立新文本
touch 1.txt
##截取文本后21行写入文本
echo $(tail -n 50 merge.txt)>1.txt
##读取文本第一行
x1line=$(awk 'NR==1' 1.txt)
##i从最后一个#号截取
#echo ${x1line#*#};
x2line=${x1line#*#};
##获取第三位的字串值
echo "$1""共有""${x2line:2:1}""条音轨";
x3line=${x2line:2:1};
read -p "请输入默认第一音轨" axtrack;
if [[ "$axtrack" == "" ]]||[[ "$axtrack" > "${x2line:2:1}" ]];then
axtrack="";
echo "请输入正确的音轨"
exit
fi
touch 3.txt
echo '1'>3.txt;
sed -i '$a''2' 3.txt;
sed -i '$a''3' 3.txt;
sed -i '$a''4' 3.txt;
sed -i '$a''5' 3.txt;
sed -i '$a''6' 3.txt;
sed -i "$axtrack"'d' 3.txt
x1nr=$(awk 'NR==1' 3.txt);
x2nr=$(awk 'NR==2' 3.txt);
x3nr=$(awk 'NR==3' 3.txt);
x4nr=$(awk 'NR==4' 3.txt);
x5nr=$(awk 'NR==5' 3.txt);
if [ "$x3line" == "1" ];then
axmap="-map 0:1";
fi
if [ "$x3line" == "2" ];then
axmap="-map 0:2";
bxmap="-map 0:1";
fi
if [ "$x3line" == "3" ];then
axmap="-map 0:$axtrack";
bxmap="-map 0:$x1nr";
cxmap="-map 0:$x2nr";
fi
if [ "$x3line" == "4" ];then
axmap="-map 0:$axtrack";
bxmap="-map 0:$x1nr";
cxmap="-map 0:$x2nr";
dxmap="-map 0:$x3nr";
fi
if [ "$x3line" == "5" ];then
axmap="-map 0:$axtrack";
bxmap="-map 0:$x1nr";
cxmap="-map 0:$x2nr";
dxmap="-map 0:$x3nr";
exmap="-map 0:$x4nr";
fi
if [ "$x3line" == "6" ];then
axmap="-map 0:$axtrack";
bxmap="-map 0:$x1nr";
cxmap="-map 0:$x2nr";
dxmap="-map 0:$x3nr";
exmap="-map 0:$x4nr";
fxmap="-map 0:$x5nr";
fi
ffmpeg -i $1 -map 0:0 $axmap $bxmap $cxmap $dxmap $exmap $fxmap -c copy -disposition:a:0 default -y $axdir/finish/$1;
rm -rf merge.txt
rm -rf 1.txt
rm -rf 2.txt
rm -rf 3.txt
exit