Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [РЕШЕНО] Скрипт для вырезания субтитров из MKV  (Прочитано 12441 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Скрипт для вырезания субтитров из MKV:
(Нажмите, чтобы показать/скрыть)



(Нажмите, чтобы показать/скрыть)

Зависимости: MKVToolNix и mediainfo
« Последнее редактирование: 29 Декабря 2010, 01:31:46 от RazrFalcon »
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт для вырезания субтитров из MKV
« Ответ #1 : 19 Ноября 2010, 22:09:02 »
Посмотрите, может mkvinfo выдает нужную информацию. Проверить не могу, так как нет ничего с субтирами.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скрипт для вырезания субтитров из MKV
« Ответ #2 : 19 Ноября 2010, 22:26:56 »
(Нажмите, чтобы показать/скрыть)
Не намного лучше, хотя я про него вообще забыл.
Как получить следующую строку, после той, которую я нашел через grep
к примеру
mediainfo 'my.mkv' | grep -oe "Text"После Техт идет строка с ID, который мне и нужен.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт для вырезания субтитров из MKV
« Ответ #3 : 20 Ноября 2010, 00:17:54 »
Как то так:
i=`cat ./subs | grep -rn  'Text #1' | sed 's/:/ /g' | awk '{print $1}'`
let "i+=1"
id_sub=`cat ./subs | sed -ne "$i"p | awk '{print $3}'`

echo "$id_sub"

Но это работает с текстом из спойлера первого поста и только с первой дорожкой титров. Сформируйте задачу поконкретней и дайте полный вывод команды "mediainfo 'my.mkv'".

Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скрипт для вырезания субтитров из MKV
« Ответ #4 : 20 Ноября 2010, 00:22:32 »
Нужен скрипт для наутилуса. Нажимаем ПКМ на видео - извлечь сабы (все, можно потом и только русс).
Он смотрит какие сабы есть в mkv и экспортирует их рядом с видео.
(Нажмите, чтобы показать/скрыть)

Ваш пример пашит, спасибо.
Сейчас надо под себя только доделать и все, посмотрим что выйдет.
« Последнее редактирование: 20 Ноября 2010, 00:27:15 от RazrFalcon »
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт для вырезания субтитров из MKV
« Ответ #5 : 20 Ноября 2010, 00:56:34 »
Как то вот так:
#!/bin/bash
#Sat Nov 20 00:49:04 MSK 2010

file_name=$@
IFS=$'\t\n'


temp=`mediainfo "$file_name" | grep -n 'Text #'`
#echo "$temp"


for i in $temp
do
string_number=`echo "$i" | grep -rn  'Text #1' | sed 's/:/ /g' | awk '{print $1}'`
let "string_number+=1"

id_sub=`mediainfo "$file_name" | sed -ne "$string_number"p | awk '{print $3}'`
echo "$id_sub"

#Вот тут происходит чудо и вытаскиваются субтитры под номером $id_sub.
#Как это вы собираетесь делать я не знаю, так что вставьте сами.
#Можно еще что нибудь через zenity сюда прикрутить или notify-send.

done

По идее должно работать. Если скармливать ему имя файла как параметр, то работает.
« Последнее редактирование: 20 Ноября 2010, 10:27:12 от aliftin »
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скрипт для вырезания субтитров из MKV
« Ответ #6 : 20 Ноября 2010, 01:14:18 »
Практически дописал :P
Только я с циклами не успел разобраться еще в bash'е.
File=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHSтак я пути беру (правда не уверен что будет работать с несколькими файлами, скорее нет), а потом экспортирую
mkvextract tracks "$File" -c UTF8 "$id_sub":"/media/data/sub"$id_sub".srt"ну или
mkvextract tracks "$File" -c UTF8 "$id_sub":"pwd"/sub"$id_sub".srt"еще мучаю одним словом.
Одним словом спасибо. В остальном проблем нет. Со всеми текущими проблемами вы мне помогли.
Насчет нотифай, легко. Только я хочу попробовать progressbar из gdialog. Экспортирует не 3-и сек, и хочется знать как дела у него.

Пользователь решил продолжить мысль 20 Ноября 2010, 07:36:37:
string_number=`echo "$i" | grep -rn  'Text #1' | sed 's/:/ /g' | awk '{print $1}'`ошибка, или мне кажется: после "$i" должен быть |

Пользователь решил продолжить мысль 20 Ноября 2010, 06:31:35:
два идентичных скрипта
один запускаю в консоли другой через nautilus-scripts
в консольном все пашит:
file_name="/media/data/my.mkv"а в наутилус
file_name=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHSэто не пашит, точнее echo $temp выдает пустоту при том что echo $file_name дает нормальный путь!
В чем проблема, я уже все перепробовал...  :buck2:

mediainfo "$file_name" > tempus выдает пустоту
mediainfo $file_name > tempus уже выдает все
но
temp=`mediainfo $file_name | grep -on "Text #"` так и не работает

temp=`mediainfo $file_name | grep -n "Text #"`
echo $temp
70:Text #1 77:Text #2 85:Text #3
в одну строку =/
« Последнее редактирование: 20 Ноября 2010, 02:45:30 от RazrFalcon »
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт для вырезания субтитров из MKV
« Ответ #7 : 20 Ноября 2010, 10:46:09 »
Тут проблема или в grep или в переменной $IFS, по крайней мере мне так кажется. Попробуйте сначала получить переменную $temp, а потом указывать что разделитель строки "\n". Примерно так:
...
temp=`mediainfo "$file_name" | grep -n 'Text #'`

IFS=$'\t\n'
...

Все это будет работать с одним файлом. Я где то тут писал что то похожее для конвертирования mkv в avi  с нормальным разрешением, так вот там я расписывал 2 варианта: папка с файлами и просто файл. Поищите, может поймете принцип работы.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скрипт для вырезания субтитров из MKV
« Ответ #8 : 20 Ноября 2010, 13:46:50 »
0   ???
(Нажмите, чтобы показать/скрыть)

file_name=$@что это делает?

PS это
« Последнее редактирование: 20 Ноября 2010, 13:52:42 от RazrFalcon »
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт для вырезания субтитров из MKV
« Ответ #9 : 20 Ноября 2010, 14:06:27 »
Это мы получаем имя файла. В консоли это выглядит так:
./script.sh /путь_к_файлу/film.mkv
Вот переменная "$@"  и есть "/путь_к_файлу/film.mkv". Я не пользуюсь nautilus-scripts, мне проще создать папку со своими скриптами и запускать их из консоли или добавить в "Open with".
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скрипт для вырезания субтитров из MKV
« Ответ #10 : 20 Ноября 2010, 14:38:29 »
Надо подумать....
Так как просто скрипт у меня пашит. И так как мне нужно.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт для вырезания субтитров из MKV
« Ответ #11 : 20 Ноября 2010, 14:42:45 »
Попробуйте вот так:
#!/bin/bash

IFS=$'\n'

while [ $# -gt 0 ]
do
file_name="$1"

temp=`mediainfo $file_name | grep -n 'Text #'`

for i in $temp
do
string_number=`echo "$i" | sed 's/:/ /g' | awk '{print $1}'`


let "string_number+=1"

id_sub=`mediainfo $file_name | sed -ne "$string_number"p | awk '{print $3}'`

#echo "$id_sub">>123
#echo "">>123

#Вот тут происходит чудо и вытаскиваются субтитры под номером $id_sub.
#Как это вы собираетесь делать я не знаю, так что вставьте сами.
#Можно еще что нибудь через zenity сюда прикрутить или notify-send.

done
shift
done

Закидывал в папку со скриптами и на выходе получал id в текстовом файле. Только вместо "mediainfo $file_name" я использовал "cat /home/aliftin/subs" из вашего четвертого поста. mediainfo это часть какого пакета?

Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скрипт для вырезания субтитров из MKV
« Ответ #12 : 20 Ноября 2010, 14:54:32 »
mediainfo, у меня только консольный вариант.
Ваш пример работает.
./script path_to_my_mkv
cat 123
3
4
То есть, логику я понимаю, то что мне и требовалось. Дальше переделывать скрипт я могу. Я не понимаю только почему через nautilus-scripts не пашит и что такое
IFS=$'\n'то есть мы задаем символ табуляции как я понимаю, но зачем?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт для вырезания субтитров из MKV
« Ответ #13 : 20 Ноября 2010, 15:04:48 »
Это мы задаем перенос строки. Создайте в папке 3 файла с именами содержащими пробелы. Потом выполните в ней скрипт:
#!/bin/bash
#IFS=$'\n'

for i in `ls ./`
do
echo "$i"
done

А теперь раскоментируйте строку и посмотрите в чем разница.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн RazrFalcon

  • Автор темы
  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скрипт для вырезания субтитров из MKV
« Ответ #14 : 20 Ноября 2010, 15:10:09 »
Аааа.... Понял.
Как добавить в "Open with"?
Все таки хочется в nautilus-scripts, чтобы было на ПКМ. =/

Пользователь решил продолжить мысль 20 Ноября 2010, 16:41:11:
В nautilus-actions можно добавить скрипт?
У меня почему то не реагирует.
sh /media/data/script
%f
« Последнее редактирование: 20 Ноября 2010, 16:41:11 от RazrFalcon »
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

 

Страница сгенерирована за 0.023 секунд. Запросов: 20.