Auteur Topic: iconv op DS414  (gelezen 17856 keer)

Ben(V)

  • Gast
Re: iconv op DS414
« Reactie #45 Gepost op: 01 augustus 2017, 08:50:39 »
@mvveelen

Piconv wordt als onderdeel van pearl geïnstalleerd, ik dacht dat ik dat al gezegd had, maar na teruglezen was het alleen een vage opmerking dat het een pearl script is, maar gelukkig is dat opgelost met behulp van Birdy.

Ik zal vanavond even kijken of ik een klein python scriptje voor je kan maken die door de bestanden heen ploegt en ze omzet naar ISO-8859-1 als ze utf-8 zijn.
Dus inclusief een test of ze wel utf-8 zijn.
Je PCH kan wel met utf-8 omgaan maar alleen als het een utf-sig is (ofwel er moet een BOM inzitten), maar ISO-8859-1 doet hij zeker.

Offline mvveelen

  • Bedankjes
  • -Gegeven: 15
  • -Ontvangen: 13
  • Berichten: 216
Re: iconv op DS414
« Reactie #46 Gepost op: 01 augustus 2017, 08:54:05 »
Dat zou super zijn, want conversie op conversie gaat dus mis :)

En dat het een Perl script is dat had ik wel gezien, maar nooit de link gelegd dat Perl niet (meer) op de Syno stond.....
  • Mijn Synology: DS920+
  • HDD's: 2x3TB + 2x14TB SHR1
  • Extra's: 16GB RAM / DSM7.2.1

Gemarkeerd als beste antwoord door mvveelen Gepost op 03 augustus 2017, 13:05:25

Ben(V)

  • Gast
Re: iconv op DS414
« Reactie #47 Gepost op: 02 augustus 2017, 18:45:04 »
Hier het beloofde python script.
Het converteert bestanden met de extensie .srt die utf-8 zijn naar bestanden die utf-8 sig zijn.
Als het goed is zal de PCH deze correct weergeven.

Het script gaat ervan uit dat je python van de SynoCommunity gebruikt.
Het heeft de python module chardet nodig.
Als die er niet blijkt te zijn (script geeft dat aan) dan installeer je dat met "pip install chardet"
Als je dit bestand opslaat als converteer,py dan kun je het starten met "./converteer.py"

Code: (python) [Selecteer]
#!/volume1/@appstore/python/bin/python

import os,io
try:
    import chardet
except:
    print 'No chardet module found in Python library'
    print 'Instal chardet with the command : pip install chardet'
    quit()

        ################################################################################
        # This programm convert utf-8 files with extension .srt to utf-8-sig
        # 'path' is the location of the subtitle files
        #################################################################################
path = '/volume1/Media/SERIES'
path = 'D:\\\\sync\\Test'

Sub_ext = '.srt'
Bck_ext = '.old'

try:
    os.path.isdir(path)
except Exception as error:
    print error
    quit()

    # Here starts the folder scanning
print 'The following files are converted:'
print ''
for dirname, dirnames, filenames in os.walk(path):
    for filename in filenames:
        root,ext = os.path.splitext(filename)
        if ext.lower() == Sub_ext:
            with open(dirname + os.sep + filename, 'rb') as fp_in:
                rawdata = fp_in.read()
            SubCodec = chardet.detect(rawdata)['encoding']
            if SubCodec == 'utf-8':
                UnicodeData = rawdata.decode('utf-8', errors='replace')
                try:
                    os.rename(dirname + os.sep + filename, dirname + os.sep + root + Bck_ext)
                except Exception as error:
                    print error
                try:
                    with io.open(dirname + os.sep + filename, mode='w',encoding='utf-8',newline='') as fp_out:
                        fp_out.write(u'\uFEFF')
                        fp_out.write(UnicodeData)
                except Exception as error:
                    print error
                print filename

Offline mvveelen

  • Bedankjes
  • -Gegeven: 15
  • -Ontvangen: 13
  • Berichten: 216
Re: iconv op DS414
« Reactie #48 Gepost op: 02 augustus 2017, 18:46:41 »
Ga ik mee testen, ik zal eerst het pad beperken voordat er iets mis gaat :)
  • Mijn Synology: DS920+
  • HDD's: 2x3TB + 2x14TB SHR1
  • Extra's: 16GB RAM / DSM7.2.1

Offline mvveelen

  • Bedankjes
  • -Gegeven: 15
  • -Ontvangen: 13
  • Berichten: 216
Re: iconv op DS414
« Reactie #49 Gepost op: 02 augustus 2017, 18:52:02 »
Hmmmm.....moet ik nog iets extra's doen?

root@DiskStation:/volume1/web# ./convert.py
No chardet module found in Python library
Instal chardet with the command : pip install chardet
root@DiskStation:/volume1/web# pip install chardet
Requirement already satisfied: chardet in /usr/lib/python2.7/site-packages
root@DiskStation:/volume1/web# ./convert.py
No chardet module found in Python library
Instal chardet with the command : pip install chardet
root@DiskStation:/volume1/web#
  • Mijn Synology: DS920+
  • HDD's: 2x3TB + 2x14TB SHR1
  • Extra's: 16GB RAM / DSM7.2.1

Ben(V)

  • Gast
Re: iconv op DS414
« Reactie #50 Gepost op: 02 augustus 2017, 18:53:13 »
Je hebt een andere python versie.
Pas even de eerste regel van het script aan zodat hij naar jouw python versie verwijst.

Wordt dan:
#!/usr/bin/env python

Offline mvveelen

  • Bedankjes
  • -Gegeven: 15
  • -Ontvangen: 13
  • Berichten: 216
Re: iconv op DS414
« Reactie #51 Gepost op: 02 augustus 2017, 19:05:07 »
Done.

Het script draait even en spuugt dan dit uit:

root@DiskStation:/volume1/web# ./convert.py
The following files are converted:

root@DiskStation:/volume1/web#

De .srt files in de test-map zijn onaangeroerd. Heb nog eens een berg .srt files erheen gezet, maar geen enkel bestand wordt iets mee gedaan?
  • Mijn Synology: DS920+
  • HDD's: 2x3TB + 2x14TB SHR1
  • Extra's: 16GB RAM / DSM7.2.1

Ben(V)

  • Gast
Re: iconv op DS414
« Reactie #52 Gepost op: 02 augustus 2017, 20:44:50 »
Ik zie net dat er nog een regel teveel instaat.
De variable path wordt twee keer toegekend.
Die tweede regel moet weg, dat was voor mij om te testen.

Offline mvveelen

  • Bedankjes
  • -Gegeven: 15
  • -Ontvangen: 13
  • Berichten: 216
Re: iconv op DS414
« Reactie #53 Gepost op: 02 augustus 2017, 22:36:41 »
Dat was het idd :)

Heb 'm net 1 keer laten draaien: 10 bestanden omgezet. Daarna nog een keer: 0. Dus dat lijkt goed te gaan. Morgen even testen of ze ook daadwerkelijk goed herkend worden door de PCH en dan kan ik de hele Media/SERIES folder laten scannen :D
  • Mijn Synology: DS920+
  • HDD's: 2x3TB + 2x14TB SHR1
  • Extra's: 16GB RAM / DSM7.2.1

Offline mvveelen

  • Bedankjes
  • -Gegeven: 15
  • -Ontvangen: 13
  • Berichten: 216
Re: iconv op DS414
« Reactie #54 Gepost op: 03 augustus 2017, 10:01:38 »
Lijkt allemaal goed te gaan. Als ik een aflevering afspeelde met een oude .srt, dan was de encoding volgens de PCH "English". Na de conversie staat er netjes "UTF-8". Ik ben nu alle .srt files aan het omzetten, tenminste.....jouw script.

Voor de zekerheid laat je .old bestanden wegschrijven. Hoe kan ik die het makkelijkst straks allemaal verwijderen uit de map /volume1/Media?
  • Mijn Synology: DS920+
  • HDD's: 2x3TB + 2x14TB SHR1
  • Extra's: 16GB RAM / DSM7.2.1

Ben(V)

  • Gast
Re: iconv op DS414
« Reactie #55 Gepost op: 03 augustus 2017, 13:00:40 »
Met filestation.
Ga in de folder staan.
Vul in het search veld *.old in
Selecteer alles
Rechtsklikken en voor delete kiezen.

Ik wil ook wel iets inbouwen dat het script ze meteen verwijdert of eventueel naar een andere folder verplaatst?

Offline mvveelen

  • Bedankjes
  • -Gegeven: 15
  • -Ontvangen: 13
  • Berichten: 216
Re: iconv op DS414
« Reactie #56 Gepost op: 03 augustus 2017, 13:05:14 »
Zo simpel, doh..... Ik zat aan een commando voor op de cli te denken. Dit is nog makkelijker inderdaad.

Nee hoor, het script is prima zo en mocht iemand anders er gebruik van maken dan is het misschien wel goed als er backup files worden gemaakt.

Dankjewel !
  • Mijn Synology: DS920+
  • HDD's: 2x3TB + 2x14TB SHR1
  • Extra's: 16GB RAM / DSM7.2.1

Ben(V)

  • Gast
Re: iconv op DS414
« Reactie #57 Gepost op: 03 augustus 2017, 13:15:58 »
Fijn dat het werkt.
Overigens is het wel specifiek een PCH issue, want utf-8 met BOM wordt bijna niet meer gebruikt.
Vandaar dat mkvtools die BOM ook niet in het bestand schrijft.

De ellende komt overigens van windows met z'n krankzinnige code pages.
De hele wereld is allang over op utf-8 waarin je elk willekeurig karakter (dus ook het chinese alfabet) kunt weergeven en in de windows wereld moet je weten welke codepage gebruikt is toen het bestand werd weggeschreven en nergens in het bestand noch in een attribute van het bestand staat welke codepage dat was.