Ну можно конечно, но проще ПКМ->вырезать сабы, чем каждый раз запускать консоль, находить через тоже mediainfo id потом скидывать файл итд.
У меня работает только то что я писал выше и то криво (пока пользуюсь тем скриптом который на первой странице). Просто можно довести до ума, и получится аля mkvextractGUI как в винде, ведь для линя его вроде нет =/
Еще можно попробовать, когда уже все будет работать, перейти на mkvinfo, так как если человек поставил себе MKVToolNix, ему не придется еще и mediainfo искать и качать.
PS: больше чем
mkvextract -h сам не знаю...
PSS: можно ли здесь
awk -F"|" '{print $1} 1-у заменить на переменную?
Нашел как:
i='$1'
echo "$answer" | awk -F"|" '{print '$i'}'
Пользователь решил продолжить мысль 13 Декабря 2010, 11:57:07:
Рабочий вариант:
#!/bin/bash
file=$@
IFS=$'\t\n'
dir=`dirname $file`
name=`basename $file | sed 's/.mkv//g'`
num=0
str_num=`mediainfo "$file" | grep -n 'Text #' | sed 's/:Text #.//g'`
function ext {
echo "$1" "$2" "$3"
mkvextract tracks "$file" -c UTF8 "$1":""$dir"/"$name"-"$2"."$3"" --no-variable-data 2>&1 | awk -vRS='\r' '(NR>1){gsub(/%/," ");print $2; fflush();}' | zenity --progress --percentage=0 --auto-close --title="MKV Extraction Tools" --text="Extracting Subtitle Track..."
}
#one sub file
if [ -z "$str_num" ]; then
str_num=`mediainfo "$file" | grep -n 'Text' | sed 's/:Text//g' | sed -ne "1"p`
let str_num++
id_sub=`mediainfo "$file" | sed -ne "$str_num"p | awk '{print $3}'`
let str_num++
format=`mediainfo "$file" | sed -ne "$str_num"p | awk '{print $3}'`
if [ "$format" = "UTF-8" ]; then ext "$id_sub" "1" "srt"; fi
if [ "$format" = "ASS" ]; then ext "$id_sub" "1" "ass"; fi
if [ "$format" = "SSA" ]; then ext "$id_sub" "1" "ass"; fi
else
ids=""
sformat=""
snum=""
#less then 3 sub file
#get sub names
for i in $str_num; do
#get subtitle number (start from 1)
str_num=`mediainfo "$file" | grep -n 'Text #' | sed 's/:Text #.//g'`
let num++
snum+=""$num" "
#get sub id's
let i++
id_sub=`mediainfo "$file" | sed -ne "$i"p | awk '{print $3}'`
ids+=""$id_sub" "
my+="TRUE
"
#get sub format
let i++
format=`mediainfo "$file" | sed -ne "$i"p | awk '{print $3}'`
#get sub name
let i+=4
stitle=`mediainfo "$file" | sed -ne "$i"p | awk '{print $3}'`
my+=""$stitle" ("$format")
"
if [ $format = "ASS" ]; then sformat+="ass "; fi
if [ $format = "SSA" ]; then sformat+="ssa "; fi
if [ $format = "UTF-8" ]; then sformat+="srt "; fi
done
#zenity chose
answer=$(zenity --list --title=$name --column=Item --column=Value --checklist --width=300 --height=300 $my)
echo "$answer"
#if nothing chosen
if [ -z "$answer" ] ; then
echo "No selection"
exit 1
fi
unset IFS
#if chosen
i='$1'
i2=1
IFS="|"
for word in $answer ; do
if [[ "$word" = `echo "$answer" | awk -F"|" '{print '$i'}'` ]]; then temp+="true "; fi
#if [[ "$word" = `echo "$answer" | awk -F"|" '{print '$i'}'` ]]; then temp2=true; fi
#if [[ "$word" = `echo "$answer" | awk -F"|" '{print '$i'}'` ]]; then temp3=true; fi
let i2++
i='$'$i2
done
echo "$temp"
unset IFS
IFS=" "
i3='$1'
i4=1
for str in $temp; do
if [ "$str" = "true" ]; then
ext `echo "$ids" | awk -F" " '{print '$i3'}'` `echo "$snum" | awk -F" " '{print '$i3'}'` `echo "$sformat" | awk -F" " '{print '$i3'}'`
fi
let i4++
i3='$'$i4
done
unset IFS
fi
#debug
echo "$ids"
echo "$snum"
echo "$sformat"
gdialog --msgbox "Extracted "$num"\nsubtitle files" 25 20
Надо еще допилить и потестить, но зато пашит!