Страница 1 из 1

Преобразование кодировок, форматов графики и иное.

СообщениеДобавлено: 18 июл 2017, 13:19
ROOT
Оглавление


Темы
 Перекодировка текстовых файлов 
 Перекодировка имён файлов 
 Преобразование тегов в аудиофайлах 
 Преобразование форматов графики 
 Преобразовать HEX в текст 
 Преобразовать Base64 в текст 


 Перекодировка текстовых файлов 
В Windows по умолчанию используется кодировка символов CP1251, чем иногда доставляет проблем пользователям других, нормальных ОС, которые давно перешли на юникод и забыли о проблемах с кодировками как страшный сон. Но пользователи Windows как американцы, не знают, что существуют другие страны ОС и сохраняют субтитры в CP1251 что делает их нечитабельными для других.

Для решения этой проблемы есть iconv который как раз и служит для перекодировки текстовых файлов из одной кодировки в другую. Во всех почти дистрибутивах данный пакет устанавливается по умолчанию, но если его вдруг не оказалось - установите его с помощью вашего пакетного
менеджера.

Для перекодировки достаточно ввести всего одну команду в терминале, а именно:
Код: выделить все
iconv -f cp1251 -t utf8 /Video/somefile.srt -o /Video/subtitles.srt

Поясню: ключ "f" задает исходную кодировку в которой файл находится сейчас, ключ "t" указывает целевую кодировку, ключ "o" задает путь для сохранения перекодированного файла.

Вот, все очень просто. Так же вы можете таким образом кодировать любые текстовые файлы. Часто и тексты песен попадаются с такой неприятной особенностью.

Недавно узнал более простой и понятный способ перекодировки текстовых файлов - с помощью enconv.
Не буду приводить полного синтаксиса и описания всех ключей. Для перекодировки достаточно одного, например:
Код: выделить все
enconv -x UTF-8 somefile.txt

С помощью данной команды мы перегнали текст в UTF-8. Да, именно, просто перегнали без необходимости указания исходной кодировки. Все просто, указываем лишь ту которую хотим получить. Желательно сделать резервную копию файла, так как насколько я понял enconv'у нельзя задать выходной файл и изменяться кодировка будет прямо в исходном файле.
вывод файла с другой кодировкой
Код: выделить все
cat iptables_1251 | iconv -f cp1251

СообщениеДобавлено: 09 апр 2022, 18:33
ROOT


 Перекодировка имён файлов  
dnf install convmv
рекурсивная перекодировка имён файлов из cp1251 в utf8 на Linux-системах (если имя файла вопросиками)
а) проверка
Код: выделить все
convmv -f CP1251 -t UTF-8 * -r

б) запуск
Код: выделить все
convmv -f CP1251 -t UTF-8 * -r --notest

Транслитерация имён файлов в текущем каталоге и его подкаталогах
Код: выделить все
#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# файлов в транслит.

shopt -s nullglob
IFS=$'\n'
for NAME in `find . -type f` ; do
  BNAME=`basename "$NAME"`
  BFOLDER=${NAME%/*}
  TRS=`echo $BNAME | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
  TRS=`echo $TRS  | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/"`
  TRS=${TRS//ч/ch};
  TRS=${TRS//Ч/CH} TRS=${TRS//ш/sh};
  TRS=${TRS//Ш/SH} TRS=${TRS//ё/jo};
  TRS=${TRS//Ё/JO} TRS=${TRS//ж/zh};
  TRS=${TRS//Ж/ZH} TRS=${TRS//щ/sh};
  TRS=${TRS//Щ/SH} TRS=${TRS//э/je};
  TRS=${TRS//Э/JE} TRS=${TRS//ю/ju};
  TRS=${TRS//Ю/JU} TRS=${TRS//я/ja};
  TRS=${TRS//Я/JA} TRS=${TRS//ъ/};
  TRS=${TRS//ъ/} TRS=${TRS//ь/};
  TRS=${TRS//Ь/}
 if [[ "$TRS" != "$BNAME" ]]; then
  NEWTRS=`echo "$BFOLDER"/"$TRS"`
#  echo "moving $NAME to $NEWTRS"
    mv -v "$NAME" "$NEWTRS"
fi
done

Транслитерация имён каталогов в текущем каталоге и его подкаталогах
Код: выделить все
#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# каталогов в транслит.

shopt -s nullglob
IFS=$'\n'
while true; do
    COUNT=0
    for NAME in `find . -type d` ; do
        BNAME=`basename "$NAME"`
        BFOLDER=${NAME%/*}
        TRS=`echo $BNAME | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
        TRS=`echo $TRS  | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/"`
        TRS=${TRS//ч/ch};
        TRS=${TRS//Ч/CH} TRS=${TRS//ш/sh};
        TRS=${TRS//Ш/SH} TRS=${TRS//ё/jo};
        TRS=${TRS//Ё/JO} TRS=${TRS//ж/zh};
        TRS=${TRS//Ж/ZH} TRS=${TRS//щ/sh};
        TRS=${TRS//Щ/SH} TRS=${TRS//э/je};
        TRS=${TRS//Э/JE} TRS=${TRS//ю/ju};
        TRS=${TRS//Ю/JU} TRS=${TRS//я/ja};
        TRS=${TRS//Я/JA} TRS=${TRS//ъ/};
        TRS=${TRS//ъ/} TRS=${TRS//ь/};
        TRS=${TRS//Ь/}
        if [[ "$TRS" != "$BNAME" ]]; then
            NEWTRS=`echo "$BFOLDER"/"$TRS"`
#            echo "moving $NAME to $NEWTRS"
            COUNT=`expr $COUNT + 1`
            mv -v "$NAME" "$NEWTRS"
            break
        fi
    done
    if [ $COUNT -eq 0 ]; then
        echo "Everything seems to be done"
        exit
    fi
done

СообщениеДобавлено: 09 апр 2022, 18:35
ROOT


 Преобразование тегов в аудиофайлах 
Для преобразования тегов в аудиофайлах требуется пакет python-mutagen.
Код: выделить все
dnf install python-mutagen
cd /MUSIC/
mid3iconv -p -d -e WINDOWS-1251 file.mp3

  • -p не изменять теги в файле, для теста
  • -d отображать теги после изменения кодировки
  • -e Конвертировать из указанной кодировки. По умолчанию используется кодировка по умолчанию для вашей локали.

СообщениеДобавлено: 09 апр 2022, 18:36
ROOT


 Преобразование форматов графики 
конвертировать все файлы .png в текущей папке в формат jpg
Код: выделить все
magick mogrify -format jpg *.png

Вы можете изменить размер всех ваших изображений JPEG в папке до размера 256x256 с помощью этой команды:
Код: выделить все
magick mogrify -resize 256x256 *.jpg

давайте уменьшим размер нашей розы в 2 раза:
Код: выделить все
magick mogrify -resize 50% rose.jpg



Собираем несколько JPG файлов в один PDF
Код: выделить все
convert -compress -quality 85 *.png doc.pdf

Склеить нескольких JPG файлов в один PDF и расположить по два на один лист можно воспользоваться командой:
Код: выделить все
convert -density 300x300 -quality 100 *.jpg -resize 50% -append output.pdf

где:
  • -density 300x300 устанавливает разрешение изображения
  • -quality 100 устанавливает качество изображения
  • *.jpg указывает на все JPG файлы в текущем каталоге
  • -resize 50% сжимает изображения на 50% (если нужно уменьшить размер исходных изображений)
  • -append размещает два изображения на одном листе
  • output.pdf - имя создаваемого PDF файла
После выполнения команды у вас будет создан PDF файл, содержащий все ваши JPG изображения с разбиением по два на один лист и сжатием.

СообщениеДобавлено: 09 апр 2022, 18:37
ROOT


 Преобразовать HEX в текст 
Код: выделить все
echo 4e657442794e657431375f3135 | xxd -r -p
NetByNet17_15

Текст в HEX
Код: выделить все
echo -n NetByNet17_15 | xxd -p
4e657442794e657431375f3135

СообщениеДобавлено: 09 апр 2022, 18:38
ROOT


 Преобразовать Base64 в текст 
Base64 в текст
Код: выделить все
$ echo Rk9PCg== | base64 -d
FOO

Текста в Base64
Код: выделить все
$ echo FOO | base64
Rk9PCg==