Python ile altyazı işlemleri 2

Daha önceden Python’da regex kullanarak altyazılar üzerinde bazı değişiklikler yapmıştım(ilk yazı burda). Bu seferki kod altyazılar srt formatlı altyazılar için birkaç fonksiyon içeriyor.

"""
subtools.py
Some subtitle tools for .srt formatted subtitles.
"""
import re

def convert(a):
    parts = a.split(":")
    hour, minute, sec = int(parts[0]), int(parts[1]), parts[2]
    minute += hour*60
    sec = sec.split(",")
    sec = int(sec[0])*1000 + int(sec[1])
    sec += minute*60000
    return sec

def revert(a):
    a = int(a)
    sec, remainder = a/1000, a % 1000
    minute = sec/60
    sec = sec%60
    hour = minute/60
    minute = minute%60
    # kod tekrarini nasil engelleyebilirim?
    if len(str(hour)) == 1:
        hour = "0%s" % hour
    if len(str(minute)) == 1:
        minute = "0%s" % minute
    if len(str(sec)) == 1:
        sec = "0%s" % sec
    if len(str(remainder)) == 1:
        remainder = "00%s" % remainder
    elif len(str(remainder)) == 2:
        remainder = "0%s" % remainder
    return "{0}:{1}:{2},{3}".format(hour, minute, sec, remainder)

def adder(a, b):
    return revert(convert(a) + convert(b))

def subtracter(a, b):
    return revert(convert(a) - convert(b)))

def submod(sub, time):
    "Advance subtitles"
    Sub = open(sub, "r").readlines()
    format = re.compile(r"(\d{1,2}:\d{1,2}:\d{1,2},\d{1,3}) --> (\d{1,2}:\d{1,2}:\d{1,2},\d{1,3})")
    for line in Sub:
        if format.findall(line):
            parts = format.findall(line)
            parts = parts[0]
            P1, P2 = adder(parts[0], time), \
                           adder(parts[1], time)
            Sub[Sub.index(line)] = "%s --> %s" % (P1, P2)
    new = open("new_%s" % sub.split("/")[-1], "w")
    new.writelines(Sub)
    new.close()

def setsub(sub, first, last):
    submod(sub, subtracter(first, last))

Linux ortamında VLC ile birşeyler izlerken en çok sıkıntı çektiğim konu GOM Player’daki altyazının istenilen kısmının filmdeki istenilen zamana denk getirilme özelliğinin olmaması, bu fonksiyonlar kullanılarak kolayca yapılabilir aslında..

10.04

10.04 kurulumum bitti ve yerleşme işlemlerimi tamamladım(Python, Django, Apache, Php, Mysql, vs.). Son ve şimdilik temiz hali şöyle:
Ayrıca http://forum.ubuntu-tr.org/index.php/topic,18251.msg221599.html adresinden bazı çılgın masaüstleri görebilirsiniz, ara sıra farklı dağıtımlar da olsa da çoğu Ubuntu(ya da en azından Gnome).

Python ile Linux ortamında DNS değiştirme

Tek tıkla kullandığınız DNS’i Google ya da openDNS’e ayarlayan bir program yazmak çok kolay aslında. Linux ortamında(ve sanırım tüm UNIX ailesinde) o an için kullandığınız DNS adresleri /etc/resolv.conf dosyasında, “# Generated by NetworkManager” satırının altında tutuluyor. Kısaca orayı değiştirerek yapıyoruz.

Gayet basit bir şekilde open fonksiyonu ile dosyayı “w” modunda açıp, içine DNSleri yazdırıyoruz, bu arada eğer ağı kopartıp bir daha bağlanmamız gerekirse, komutlarımız “ifconfig ağ_adı down/up”. Bunu terminalden yazmak gerekiyor ama os.system kütüphanesini kullanarak bu işi programımıza yaptırabiliriz.

Kısaca şöyle oluyor:

import os.system

DNS = {
    "google" : ["8.8.8.8", "8.8.4.4"]
    "opendns" : [] #buraya opendns ekle
    }

open("etc/resolv.conf", "w")
open.writelines(DNS["google"]) #ya da opendns
open.close()

#bağlantıyı koparmak
os.system("ifconfig ag_adi down")
#yeniden bağlanmak
os.system("ifconfig ag_adı up")

Ubuntu’da bozulan klavye ayarlarını düzeltmek

Bir güncelleme sonrası oldu sanırım, Ubuntu’da klavyemdeki AlrGt ve Num Lock tuşları çalışmamaya, daha doğrusu yanlış çalışmaya başladı. AltGr tuşuna bastığımda tüm klavye kilitleniyordu ve başka hiçbir tuşa basamıyorduö. Num Lock’da da yanlış tuş yanlış işlevi görüyordu.

Düzeltmek için System > Preferences > Keyboard > Layouts ekranından Key to choose 3rd level seçeneği AltGr nin işlevine denk geliyor, burdan right alt’ı, numeric keypad layout selection ekranından da ATM/phone style’ı seçtiğimde eski haline döndü.

Ubuntu’da gconf-editor aracılığıyla kısayol tuşu atamak

Aslında sadece Ubuntu değil, sanırım Gnome kullanan tüm dağıtımlarda kullanılabilir. Kısayol tuşu atamada bazı sorunlar yaşıyordum bir süredir, örneğin yön tuşlarını ve super tuşunu kısayollara atayamıyordum. gconf-editor aracılığıyla hallettim.

gconf-editor sanırım kurulumda gelen bir program(en azından ben ayrıca kurduğumu hatırlamıyorum, eğer gelmiyorsa paket yöneticisinden yükleyebilirsiniz). Bilgisayarımızda yüklü olan programlarımızın ayar dosyalarını rahatça düzenlememizi sağlıyor. Benim kısayol tuşu atamak istediğim program gnome-do’ydu, gconf-editor’den Gnome-do adresini, oradan CoreKeyBindings’i buldum ve atamak istediğim özelliğe gelip “Right” yazdım. Programda bunu yapamıyordum, nedense yön tuşlarını ve super tuşunu kısayol olarak atamaya izin vermiyordu(halbuki default olarak yön tuşu geliyor zaten o kısayol için).Bir diğer yöntem de programı tüm ayar dosyalarıyla temizlemek, onu da konsoldan “sudo aptitude purge gnome-do” komutuyla yapabilirsiniz. Daha sonra yeniden kurduğunuzda tüm ayarlarınız sıfırlanmış olarak gelecektir.

Neden Linux kullanıyoruz?

Biliyorum ki bu başlığı okuduğunuzda pekçoğunuz sinirlendi(kötü bir başlık olduğunu kabul ediyorum), pekçoğunuz içinden “yine bir troll” diye geçirdi, fakat amacım ne birilerini sinirlendirmek, ne de trolluk. Forumlarda(ubuntu-tr dahil) ve SUDO’da dördüğüm bir durumu anlatmak istiyorum. Devamı »

Ubuntu kırmızı ünlem sorunu -çözüldü

Ubuntu’da ne zaman olduğunu anlayamadığım aniden ortaya çıkan kırmızı ünlem(“The update information is outdated. This may be caused by network problems. Please update manually by clicking on this icon and then selecting ‘Check’.”) sorununun birkaç çözüm yolu var. Aslında sorun paket yöneticisini güncelleyememizden kaynaklanıyor.

  1. sudo apt-get update
  2. sudo apt-get upgrade
  3. sudo aptitude update

Bu komut bazılarında işe yaramış fakat bende işe yaramadı. Bu durumda önce güncellenemeyen paketleri System > Administration > Software Resources’dan “Other Software” tabına geçiyor ve güncellenemeyen yazılım kaynaklarını pasif hale getiriyoruz. Çıkarken reload’a tıklıyoruz. Düzelmiş olması lazım.