Synology-Forum.nl
Tweaks / Addons A.K.A. The Underground => Media Streaming mods => Topic gestart door: mvveelen op 24 juli 2017, 13:03:06
-
Hi,
ik heb al mijn media met externe .srt bestanden op mijn NAS staan. Nu heb ik begrepen dat ik mbv iconv alle .srt bestanden kan omzetten naar UTF-8 (een must omdat ik nu bij elke aflevering dit handmatig moet instellen). Alleen kent m'n Syno het commando 'iconv' niet. Hoe krijg ik dit geïnstalleerd (zonder bootstrap) zodat ik het toch kan gebruiken?
Of is er een andere mogelijkheid dat ik alle .srt bestanden kan zoeken, omzetten naar UTF-8 en dan ook nog eens in een cron ?
-
piconv staat wel op je Nas en kan hetzelfde.
Hier vind je de syntax:
http://para.se/perldoc/piconv.html
Overigens zijn alle ascii karakter gelijk in utf-8 en windows codepages.
Alleen de karakters met speciale tekens verschilen.
Als je autosub gebruikt om je subs te downloaden zit daar een setting in om het formaat van de .srt file op utf-8 te zetten.
Autosub converteert dan voor je als dat nodig is.
-
Ik heb net ontdekt dat iconv wel degelijk op de Syno staat, je moet er alleen php voor zetten.....
Nu nog een script vinden dat precies doet wat ik wil: alle .srt bestanden opslaan als UTF-8
Ik gebruik wel Autosub, maar veelal haal ik QoQ afleveringen binnen en haal ik daar de .srt uit en converteer ik video en audio tot 1 .mkv bestand. Vraag me niet waarom, maar dat is ooit zo gestart en ik trek die lijn door. Ik wil nu alleen dus die .srt bestanden 'en masse' omzetten.
-
http://www.ustrem.org/en/articles/bash-iconv-all-files-from-directory-en/
-
Hey,
die ga ik eens goed bekijken. Ik had al gestoeid met een ander script en dat resulteerde in alle seizoenen van 1 serie die nu .srt bestanden van 1Kb hebben :'( Ik ga dus eerst verder testen in een mapje waar het geen kwaad kan, en ondertussen op zoek naar die hele serie met bijbehorende .srt bestanden, hahahaha.
Thanks !
-
Als het niet lukt kan ik wel een python script voor je schrijven, maar dan zul je tot het weekend moeten wachten.
-
Ik wil dan wel wachten eigenlijk. Ik ben nu de serie aan het binnenharken en heb liever iets dat goed werkt.
Hoe wil je het gaan aanpakken? De bestaande .srt renamen naar .bak en dan de UTF-8-srt opslaan als .srt met dezelfde naam als de oude/originele/bestaande .srt? Ach, ik merk het wel :)
-
Die sub uit de video halen doe je dat op een windows systeem?
Met andere woorden, weet je zeker dat al je sub's met een windows codepage zijn gemaakt?
Als je namelijk gaat omzetten naar utf-8 en de sub is al utf-8 dan gaat er van alles mis.
Bij converteren moet je weten in welk formaat de bron weggeschreven is.
-
Het converteren doe ik dmv MKVtools op een MacBook Pro. Wat voor codering het (over het algemeen) is durf ik niet te zeggen. Het zal ook vast niet 100% hetzelfde zijn. Is er geen check in te bouwen die bepaalt wat de codering het is en als het al UTF-8 is om het dan met rust te laten en als het een andere codering is om het dan naar UTF-8 om te zetten?
Hoe kan ik dmv wat steekproeven bekijken wat de coderingen nu zijn?
-
Dan zit daar vermoedelijk je probleem.
De standaard encoding van een MAC is UTF-8, dus als er bij het maken van de .mkv niet is aangegeven welke codering gebruikt wordt dan zal mkvtoolnix de standaard codering van de MAC gebruiken.
Als er in de .mkv het wel netjes is aangegeven zal mkvtoolnix de sub converteren naar UTF-8 ( of zo laten als hij al utf-8 was).
De meeste .mkv's waar al een sub in zit zijn gemaakt op windows systemen en daar gaat het dus fout bij elk speciaal karakter, want als het 8ste bit op een staat dan wordt het karakter opgezocht in de actuele codepage.
Bij utf-8 geeft het 8ste bit aan dat het een adres (van 2, 3 of 4 byte) is in de utf-8 code tabel.
Met behulp van mkvinfo kun je kijken of er een codec opgegeven is en zo ja welke codering gebruikt is.
Ik weet niet hoe het met mkvtoolnix zit, maar zelf gebruik ik ffmpeg om subs uit een mkv te halen en daarmee kun je opgeven welke codec gebruikt moet worden.
Als ik dan windows-1252 gebruikt gaat het altijd goed.
EDIT:
Ik kan wel een python progje voor je schrijven die met behulp van ffmpeg de video,audio en nederlandse sub uit je .mkv haalt en daar weer een nieuwe .mkv van maakt.
Kan allemaal op je NAS draaien en via de taakplanner regelmatig laten draaien.
-
Het is MKVtools, niet MKVtoolnix wat ik gebruik. Ik heb die een tijd geleden aangeschaft hiervoor.
Er is dus geen mogelijkheid om dmv een script eerst uit te lezen wat de codering is en het dan om te laten zetten als het geen UTF-8 is?
Als ik handmatig de .srt bestanden in Windows (Parallels op de MacBook) via een Dos boxje omzet mbv Subtitleedit, dan pakt deze alle .srt bestanden en zet ze om, klaar. Of het nu al UTF-8 bestanden zijn of niet. Alleen is dat dan wel een flinke klus. Of ik moet het in Dos gaan scripten dat hij alle directories van de NAS afstruint en de .srt bestanden dan omzet. Ook niet erg, maar liever dmv een cron op de NAS natuurlijk :)
-
EDIT:
Ik kan wel een python progje voor je schrijven die met behulp van ffmpeg de video,audio en nederlandse sub uit je .mkv haalt en daar weer een nieuwe .mkv van maakt.
Kan allemaal op je NAS draaien en via de taakplanner regelmatig laten draaien.
Lees dit nu pas :)
Daar kan ik in ieder geval eens mee gaan testen om te zien of dat het euvel verhelpt.
-
Zal van het weekend wel wat in elkaar prutsen.
Hou deze post in de gaten voor het resultaat.
-
Will do.
Maar het hoeft niet zo te zijn dat het de video/audio convert naar .mkv en dan de .srt eruit filtert hoor? Want wat ik heb staan is 99,9% .mkv met alleen maar video+audio en dan los erbij de .srt files.
Edit:
Al browsend kwam ik het commando "chardetect" tegen. Ik heb wat .srt files in een testmapje gezet en dit komt eruit:
root@DiskStation:/volume1/web/test# /usr/bin/chardetect *.srt
Colony S01E01 Pilot.srt: utf-8 with confidence 0.99
Colony S01E02 A Brave New World.srt: utf-8 with confidence 0.99
Colony S01E03 98 Seconds.srt: utf-8 with confidence 0.99
Colony S01E04 Blind Spot.srt: utf-8 with confidence 0.99
Colony S01E05 Geronimo.srt: utf-8 with confidence 0.99
Colony S01E06 Yoknapatawpha.srt: utf-8 with confidence 0.99
Dexter S01E01 Dexter.srt: UTF-8-SIG with confidence 1.0
Dexter S01E02 Crocodile.srt: UTF-8-SIG with confidence 1.0
Dexter S01E03 Popping Cherry.srt: UTF-8-SIG with confidence 1.0
Dexter S01E04 Let's Give the Boy a Hand.srt: UTF-8-SIG with confidence 1.0
Designated Survivor S01E17 The Ninth Seat.srt: UTF-8-SIG with confidence 1.0
Designated Survivor S01E18 Lazarus.srt: UTF-8-SIG with confidence 1.0
Designated Survivor S01E19 Misalliance.srt: UTF-8-SIG with confidence 1.0
Designated Survivor S01E20 Bombshell.srt: UTF-8-SIG with confidence 1.0
Hieruit zou je kunnen concluderen dat alleen de laatste 8 "echte" UTF-8 coderingen hebben. De laatste 4 heb ik gecontroleerd tijdens het kijken van die afleveringen en daar ging inderdaad alles goed met speciale leestekens zoals àáèéë, enz.
Misschien kan dit nuttig zijn bij het maken van een script ?
-
Volgens mij zegt chardetect dat ze allemaal utf-8 zijn.
Een zekerheid van 0.99 is tamelijk hoog.
Er zijn utf-8 met BOM bestanden die aan het begin van het bestand een signature hebben waaraan je kunt zien dat het een utf-8 bestand is.
Als chardetect zo'n bestand tegenkomt concludeert hij met 100% zekerheid dat het een utf-8 bestand is, in andere gevallen gaat hij door het bestand heen en probeert te raden welk soort bestand dat is en dan krijg je nooit een score van 1.0 maar altijd lager.
Die bestanden met een BOM erin zijn die met een "utf-8-sig" codec.
Zijn dit sub's die je uit een .mkv gehaalt hebt of komen ze elders vandaan?
Haal eens een sub door chardetect waarvan je weet dat de speciale karakters verkeerd worden weergegeven.
Waar speel je de video's mee af trouwens, want de meeste players kunnen met meerdere codecs werken.
Op mijn mediaplayer kun je kiezen tussen utf-8 en windows-latin.
-
Met de 4 laatste had ik dat alles goed werd weergegeven.
De .srt bestanden haal ik uit de .mkv en ik laat vervolgens dmv een cron de rommel omzetten naar de juiste karakters. Dus bijv: à wordt à
Echter, de PCH A400 geeft dan toch de rommel (à) weer, behalve als ik in het menu scroll naar UTF-8 encoding. Dit laatste is niet vast te zetten en moet ik voor elke aflevering weer opnieuw instellen.
BEHALVE als ik het door subtitleedit haal, dan speelt ie het wel meteen goed af. Vandaar dat ik een methode zocht om alle .srt bestanden automatisch om te laten zetten.
Die 99% of 0,99 is in mijn geval dan niet OK en pas bij de 1,00 speelt de A400 ze goed af zonder ingrijpen.
-
Waarschijnlijk herkent die PCH A400 alleen utf-8 correct als hij een utf-8-sig in het bestand vind en anders zal hij ze wel als een windows codec behandelen en dat gaat dan fout.
Overigens kun je niet zomaar een karakter in een utf-8 bestand veranderen, want buiten de standaard ascii karakters bestaat utf-8 helemaal niet uit karakters maar zijn indexes in een tabel van karakters.
Die indexes zijn 2 of 3 bytes groot.
Als je de eerste vervangt door een ascii karakter dan heb je een ongedefinieerd tweede( en eventueel derde) byte.
Even de functionaliteit samenvatten voor het te bouwen script.
- Scanned een folder (+subfolders) naar .mkv bestanden.
- Renamed de .mkv naar .old
- Maakt een nieuwe .mkv
- Kopieert de videostream + audiostream van de .old naar de nieuwe .mkv
- Als er geen .srt file is, haal de .srt uit de .old
- Converteer de .srt naar utf-8-sig en stop die in de .mkv
- Optioneel: Verwijder of verplaats de .old en/of .srt
-
Da's een hele waslijst, maar voor mij is dat eerste deel niet persé nodig. Het stukje mbt de .srt wel. Maar misschien dat je het voor een breder publiek wilt maken, dat kan natuurlijk :)
-
Wat bedoel je precies met alleen het laatste stukje?
-
Converteer de .srt naar utf-8-sig en stop die in de .mkv
Optioneel: Verwijder of verplaats de .old en/of .srt
Of je moet een andere oplossing voor me hebben? Want de .mkv bestanden die ik heb bestaan alleen nog maar uit video en audio, dus de .srt eruit halen gaat 'm niet worden :)
-
Ok gaan we doen.
EDIT:
Kun je eens proberen een sub die niet goed weergegeven wordt door je PCH naar ISO-8859-1 te converteren en kijken of hij dan wel goed weergeeft?
Dat converteren doe je door deze commandline op je NAS:
piconv -f utf8 -t ISO-8859-1 Input_file.srt > Output_file.srt
Vervang ""Input_file.srt door de naam van je sub file
Ik vermoed namelijk datje PCH bij geen BOM gewoon ISO-8859-1 aanneemt als codering en jij hebt met mkvtools alles naar UTF-8 geconverteerd.
-
Ik zie nu pas je berichtje, zal het eens gaan testen. Moet eerst nog even wat zoeken hier (of een nieuw topic openen als ik het antwoord niet kan vinden :))
Edit: als ik dit doe, dan krijg ik een lege .srt terug ? Hoewel, leeg.... er staat in: Could not open input file: piconv
root@DiskStation:/volume1/Media/SERIES/Devious Maids/Seizoen 3# php piconv -f utf8 -t ISO-8859-1 'Devious Maids S03E01 Awakenings.srt' > 'Devious Maids S03E01 Awakenings2.srt'
-
die php moet er niet voor.
Het is een pearl script en geen php
-
Dan kom ik niet verder:
root@DiskStation:/usr/local/bin# cd '/volume1/Media/SERIES/Devious Maids/Seizoen 3'
root@DiskStation:/volume1/Media/SERIES/Devious Maids/Seizoen 3# piconv -f utf8 -t ISO-8859-1 'Devious Maids S03E01 Awakenings.srt' > 'Devious Maids S03E01 Awakenings2.srt'
-ash: piconv: command not found
root@DiskStation:/volume1/Media/SERIES/Devious Maids/Seizoen 3#
Ik heb hetzelfde met het commando mosquitto_pub .... ergens zal dit toegevoegd moeten worden zodat het commando bekend is, waar ik het ook gebruik op de cli. Heb daarvoor een ander topic geopend, maar begrijp nog niet goed hoe dat werkt helaas.
Edit: mosquitto_pub is opgelost, thanks Birdy :) !
-
Doe eens:
echo $PATH
-
root@DiskStation:/usr/sbin# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:/volume1/@appstore/mosquitto/bin
root@DiskStation:/usr/sbin# ls
aa-log-parser debugfs hwclock iptables losetup mkfs.ext4 ntpdate pptp reload showmount tc vgcreate
aa-status dhclient idmapd iptables-restore lslocks mkfs.fat ntpdc pvcreate repquota shutdown tcpdump vgdisplay
apparmor_parser dmsetup ietadm iptables-save lsmod mkfs.msdos ntpq pvdisplay resize2fs slapd telinit vgextend
arp e2fsck ietd iptables-xml lvcreate mkfs.vfat openvpn pvremove restart sm-notify tracepath vgreduce
arping eject ifconfig iscsiadm lvdisplay mkswap parted pvresize rmmod sparted tune2fs vgremove
avahi-browse exportfs init iscsid lvextend modprobe poweroff pvs route start umount.ecryptfs vgs
avahi-daemon fdisk initctl iscsi-iname lvm mountd pppd quota rpcbind statd unix_chkpwd wpa_cli
badblocks fsck.ext3 insmod iw lvremove mount.ecryptfs pppoe quotacheck rpcinfo status upsd wpa_passphrase
blockdev fsck.ext4 ip iwconfig lvs mount.nfs pppoe-connect quotaoff runlevel stop upsmon wpa_supplicant
bluetoothd fsck.hfsplus ip6tables iwlist mdadm nfsd pppoe-relay quotaon saslauthd svcgssd upssched xl2tpd
clockdiff fstrim ip6tables-restore iwpriv mkdosfs nfsstat pppoe-start rarpd saslpasswd2 swapoff vgcfgbackup xtables-multi
crond getty ip6tables-save kinit mke2fs nslcd pppoe-status rdisc setquota swapon vgcfgrestore
dbus-daemon halt ipsec klist mkfs.ext3 ntpd pppoe-stop reboot sfdisk sysctl vgchange
root@DiskStation:/usr/sbin#
-
root@DiskStation:/usr/sbin# ls
Staat niet in /usr/sbin maar in /usr/local/bin
En die staat in je PATH:
/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:/volume1/@appstore/mosquitto/bin
Dus ik snap ff niet waarom je die foutmelding krijgt.
-
- ik ben weer bij :D -
Ja, die staat in het pad inderdaad. En 'hij' staat er ook inderdaad:
root@DiskStation:/usr/local/bin# ls
bin easy etc h2xs instmodsh nano pdftops perldoc php56-cgi pl2pm pod2usage pstruct python3 splain
c2ph easy-server feasibilitycheck htdigest json_pp node perl perlivp php56-fpm pod2html podchecker ptar python3.5 vendor_perl
corelist enc2xs gs htpasswd lib npm perl5.24.0 perlthanks phpdbg56 pod2man podselect ptardiff python3.5m xsubpp
cpan encguess h2ph httpd22 libnetcfg nvm perlbug php56 piconv pod2text prove ptargrep shasum zipdetails
root@DiskStation:/usr/local/bin# piconv -l
-ash: piconv: command not found
-
Geef het volgende commando eens:
piconv -l
-
:)
Zie mijn vorige bericht.
-
O ja.... :lol:
Vreemd, ik kan (op dit moment) niet verklaren waarom piconv niet gevonden wordt :'(
-
login as: admin
admin@192.168.1.23's password:
admin@DS716II:~$ sudo -i
root@DS716II:~# cd /volume1/T1
root@DS716II:/volume1/T1# piconv -l
7bit-jis
AdobeStandardEncoding
.
.
enz......
root@DS716II:/volume1/T1# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
Ik zie het niet, jij hebt hetzelfde PATH, behalve dat jij dan de laatste toevoeging hebt en ik niet.
root@DiskStation:/usr/sbin# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:/volume1/@appstore/mosquitto/bin
-
Ja toch?
Ik begrijp het ook niet. Lijkt me ook niet dat je piconv om zeep kunt helpen door het een of ander. :|
-
Doe eens:
ls -la /usr/local/bin/piconv
-
root@DiskStation:/usr/local/bin# ls -la /usr/local/bin/piconv
lrwxrwxrwx 1 root root 44 Jul 17 21:51 /usr/local/bin/piconv -> /volume1/@appstore/Perl/usr/local/bin/piconv
root@DiskStation:/usr/local/bin# cd /volume1/@appstore/
root@DiskStation:/volume1/@appstore# ls
Apache2.2 CloudSync get-pip.py HyperBackup LogCenter mosquitto Node.js_v4 py3k sickbeard-custom SurveillanceStation WebStation
AudioStation cronjobeditor git HyperBackupVault MariaDB nano nzbget python Spotweb TextEditor
AutoSub-BootstrapBill domoticz git-server Init_3rdparty monit Node.js PHP5.6 PythonModule StorageAnalyzer VPNCenter
Mis ik de 'Perl'-map ??
-
Precies hetzelfde, het is een link.....
Doe eens:
ls -la /volume1/@appstore/Perl/usr/local/bin/piconv
-
root@DiskStation:/volume1/@appstore# ls -la /volume1/@appstore/Perl/usr/local/bin/piconv
ls: cannot access /volume1/@appstore/Perl/usr/local/bin/piconv: No such file or directory
Edit:
Perl package geïnstalleerd en nu werkt het meteen:
root@DiskStation:/volume1/@appstore# ls -la /volume1/@appstore/Perl/usr/local/bin/piconv
-rwxr-xr-x 1 root root 8331 Dec 12 2016 /volume1/@appstore/Perl/usr/local/bin/piconv
root@DiskStation:/volume1/@appstore# piconv -l
7bit-jis
AdobeStandardEncoding
AdobeSymbol
AdobeZdingbat
ascii
ascii-ctrl
big5-eten
big5-hkscs
cp1006
cp1026
cp1047
cp1250
cp1251
cp1252
cp1253
cp1254
cp1255
cp1256
-knip-
null
posix-bc
shiftjis
symbol
UCS-2BE
UCS-2LE
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
UTF-7
utf-8-strict
utf8
viscii
root@DiskStation:/volume1/@appstore#
-
Dat is dus het probleem, is een stapje verder.....ik denk dat er wat fout zit in Perl,
Ik krijg:
ls -la /volume1/@appstore/Perl/usr/local/bin/piconv
-rwxr-xr-x 1 root root 8331 Dec 12 2016 /volume1/@appstore/Perl/usr/local/bin/piconv
Bestaat "/volume1/@appstore/Perl" wel ? Zo ja, usr, local, bin ook ?
En staat piconv ook daar ?
-
Zie m'n edit in de post hiervoor. Na installeren van Perl package werkt het wel :) !
-
O...ok...die EDIT had ik niet gezien maar, zou ook mijn idee geweest zijn. :D
Enig idee waardoor Perl om zeep was geholpen ?
-
Persoonlijk hou ik niet zo van EDIT's ;)
-
Nee? Tenminste, behalve dat ik het er niet (meer ?) op had staan?
Zou het zonder het package al moeten werken, of is Perl toch een afhankelijkheid?
Ik ga dan nu maar gauw kijken wat er met de subs gebeurt met piconv :D
Dankjewel voor de hulp, Birdy !
-
Persoonlijk hou ik niet zo van EDIT's ;)
Tja, ligt ook een beetje op welk forum je bent en welke regels ze hanteren. Ben het wel met je eens, het is dan toch duidelijker als je alles onder elkaar leest / volgt.
-
Ok gaan we doen.
EDIT:
Kun je eens proberen een sub die niet goed weergegeven wordt door je PCH naar ISO-8859-1 te converteren en kijken of hij dan wel goed weergeeft?
Dat converteren doe je door deze commandline op je NAS:
piconv -f utf8 -t ISO-8859-1 Input_file.srt > Output_file.srt
Vervang ""Input_file.srt door de naam van je sub file
Ik vermoed namelijk datje PCH bij geen BOM gewoon ISO-8859-1 aanneemt als codering en jij hebt met mkvtools alles naar UTF-8 geconverteerd.
Ik heb dit net met één sub geprobeerd. Zonder deze bewerking kreeg ik die rare tekens te zien bij het woord "één", maar na het uitvoeren van deze regel (en originele verwijderen en de nieuwe renamen) zag de ondertiteling er perfect uit !!
Is dat dan een bevestiging van je vermoeden en wordt het daarmee makkelijker om alle .srt bestanden in 1 keer aan te passen?
Ik heb het commando nog eens toegepast op de al aangepaste .srt, maar dan gaat het wel weer (anders) mis trouwens........dus dan zou er een check ingebouwd moeten worden voordat de conversie plaatsvindt. Toch?
-
Zou het zonder het package al moeten werken
Nee, het zit echt in PERL.
Beetje jammer dat als je PERL de-installeert, dat de link dan niet verwijderd wordt. ::)
-
@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.
-
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.....
-
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"
#!/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
-
Ga ik mee testen, ik zal eerst het pad beperken voordat er iets mis gaat :)
-
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#
-
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
-
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?
-
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.
-
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
-
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?
-
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?
-
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 !
-
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.