środa, 15 listopada 2023

Zmiana polskich znaków na łacińskie w napisach (sed, enca)

W 2014 popełniłem wpis dotyczący zamiany polskich znaków w plikach tekstowych na ascii. Chodziło wówczas o to, by w razie problemów z kodowaniem plików tekstowych, odtwarzacz je wyświetlający nie "krzaczył". To jeszcze pół biedy, bo w ten sposób można byłoby się domyśleć o co chodzi, ale vlc lubi po prostu nie wyświetlać "problematycznych" linii tekstu.

Otóż poprawiłem nieco skrypt i o to rezultat:
#!/bin/bash

for f in *.srt; do

   sed 's/ą/a/g' "$f" -i;
   sed 's/ę/e/g' "$f" -i;
   sed 's/ż/z/g' "$f" -i;
   sed 's/ź/z/g' "$f" -i;
   sed 's/ł/l/g' "$f" -i;
   sed 's/ó/o/g' "$f" -i;
   sed 's/ą/a/g' "$f" -i;
   sed 's/ś/s/g' "$f" -i;
   sed 's/ć/c/g' "$f" -i;
   sed 's/ń/n/g' "$f" -i;
   sed 's/Ą/A/g' "$f" -i;
   sed 's/Ę/E/g' "$f" -i;
   sed 's/Ż/Z/g' "$f" -i;
   sed 's/Ź/Z/g' "$f" -i;
   sed 's/Ł/L/g' "$f" -i;
   sed 's/Ó/O/g' "$f" -i;
   sed 's/Ą/A/g' "$f" -i;
   sed 's/Ś/S/g' "$f" -i;

done
Lub, z wykorzystaniem enca:
#!/bin/bash
for f in *.srt; do
   enca -L polish -x utf-8 "$f"
done

poniedziałek, 9 października 2023

Konwersja napisów z *.txt na *.srt dla vlc

Konwersja napisów dla filmu z *.txt na *.srt przebiega następująco:

ffmpeg -i napisy.txt napisy.srt

Poniżej dla całej zawartości katalogu:

 #!/bin/bash

for f in *.txt; do

    ffmpeg -i "$f" ${f/.txt/.srt}

done

Domyślnie z kodowaniem utf8, dla np windows-1250:

 #!/bin/bash

for f in *.txt; do

    ffmpeg -sub_charenc windows-1250 -i "$f" ${f/.txt/.srt}

done

Wzięło się to stąd, że vlc domyślnie nie ładuje napisów *.txt przy starcie filmu, tylko trzeba podać mu te napisy ręcznie. Jest to prawdopodobnie zamierzone przez autorów programu. Z *.srt tego problemu nie ma.