{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Yuriy Gavrilov: posts tagged Audio",
    "_rss_description": "Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov",
    "_rss_language": "en",
    "_itunes_email": "yvgavrilov@gmail.com",
    "_itunes_categories_xml": "",
    "_itunes_image": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic-square@2x.jpg?1643451008",
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/gavrilov.info\/tags\/audio\/",
    "feed_url": "https:\/\/gavrilov.info\/tags\/audio\/json\/",
    "icon": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic@2x.jpg?1643451008",
    "authors": [
        {
            "name": "Yuriy Gavrilov - B[u]g - for charity.gavrilov.eth",
            "url": "https:\/\/gavrilov.info\/",
            "avatar": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic@2x.jpg?1643451008"
        }
    ],
    "items": [
        {
            "id": "239",
            "url": "https:\/\/gavrilov.info\/all\/transkribaciya-audio-python-na-faster-whisper\/",
            "title": "Транскрибация аудио python на faster-whisper",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-174.png\" width=\"256\" height=\"256\" alt=\"\" \/>\n<\/div>\n<p>Все достаточно легко<\/p>\n<p>Подготовка<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">python3 -m venv .\/whisper<\/code><\/pre><p>Активация и установка этого <a href=\"https:\/\/github.com\/SYSTRAN\/faster-whisper\">https:\/\/github.com\/SYSTRAN\/faster-whisper<\/a><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">source .\/whisper\/bin\/activate\npip install faster-whisper<\/code><\/pre><p>Сам код<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">import sys\nimport os\nimport time\nfrom faster_whisper import WhisperModel\n\n# --- Конфигурация модели Whisper ---\nmodel_size = &quot;large-v3&quot;\n# Выберите свою конфигурацию:\n# model = WhisperModel(model_size, device=&quot;cuda&quot;, compute_type=&quot;float16&quot;) # Если есть GPU и CUDA\n# model = WhisperModel(model_size, device=&quot;cuda&quot;, compute_type=&quot;int8_float16&quot;) # Если есть GPU и CUDA с INT8\nmodel = WhisperModel(model_size, device=&quot;cpu&quot;, compute_type=&quot;int8&quot;) # Для CPU (как в вашем примере)\n# -----------------------------------\n\ndef transcribe_mp3_to_text(mp3_filepath):\n    &quot;&quot;&quot;\n    Транскрибирует MP3 файл и сохраняет результат в текстовый файл.\n    &quot;&quot;&quot;\n    if not os.path.exists(mp3_filepath):\n        print(f&quot;Ошибка: Файл MP3 не найден: {mp3_filepath}&quot;)\n        return False\n\n    if not mp3_filepath.lower().endswith(&quot;.mp3&quot;):\n        print(f&quot;Ошибка: Файл '{mp3_filepath}' не является MP3 файлом. Пропускаем.&quot;)\n        return False\n\n    # Извлечение имени файла без расширения\n    filename_without_ext = os.path.splitext(os.path.basename(mp3_filepath))[0]\n    output_txt_filepath = os.path.join(os.path.dirname(mp3_filepath), f&quot;{filename_without_ext}.txt&quot;)\n\n    print(f&quot;[{time.strftime('%Y-%m-%d %H:%M:%S')}] Начинаем транскрипцию '{mp3_filepath}'...&quot;)\n    print(f&quot;Результат будет сохранен в '{output_txt_filepath}'&quot;)\n\n    try:\n        segments, info = model.transcribe(mp3_filepath, beam_size=5)\n\n        detected_language_msg = f&quot;Detected language: '{info.language}' with probability {info.language_probability:.2f}&quot;\n        print(detected_language_msg)\n\n        # Сохранение транскрипции в текстовый файл\n        with open(output_txt_filepath, 'w', encoding='utf-8') as f_out:\n            f_out.write(f&quot;--- Транскрипция для: {os.path.basename(mp3_filepath)} ---\\n&quot;)\n            f_out.write(f&quot;{detected_language_msg}\\n\\n&quot;)\n            \n            full_text = [] # Для сбора всего текста, если нужно вывести в конце\n\n            for segment in segments:\n                segment_line = f&quot;[{segment.start:.2f}s -&gt; {segment.end:.2f}s] {segment.text}&quot;\n                print(segment_line) # Выводим в консоль для отладки\n                f_out.write(f&quot;{segment.text}\\n&quot;) # Записываем только текст в файл, по сегментам\n                full_text.append(segment.text)\n\n            # Если вы хотите сохранить всю транскрипцию одним блоком в конце файла или отдельный файл\n            # f_out.write(&quot;\\n\\n--- Полный текст ---\\n&quot;)\n            # f_out.write(&quot; &quot;.join(full_text))\n\n        print(f&quot;[{time.strftime('%Y-%m-%d %H:%M:%S')}] Транскрипция успешно завершена! Результат в '{output_txt_filepath}'&quot;)\n        return True\n\n    except Exception as e:\n        print(f&quot;Ошибка при транскрипции файла '{mp3_filepath}': {e}&quot;)\n        # Вы можете добавить логирование ошибки в отдельный файл, если нужно\n        return False\n\nif __name__ == &quot;__main__&quot;:\n    if len(sys.argv) &lt; 2:\n        print(&quot;Использование: python process_mp3.py &lt;путь\/к\/вашему\/файлу.mp3&gt;&quot;)\n        sys.exit(1)\n\n    mp3_file_path_arg = sys.argv[1] # Это будет полный путь к MP3 файлу, переданный из Automator\/Bash\n    transcribe_mp3_to_text(mp3_file_path_arg)<\/code><\/pre><p>Итоги запуска<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">(whisper) (base) yuriygavrilov@MacBookPro fastwhisper % python whisp.py            \nDetected language 'ru' with probability 0.998883\n[0.00s -&gt; 4.96s]  Раз, два, три, привет, как дела?\n[5.94s -&gt; 8.54s]  Все хорошо, а у тебя как?\n[9.54s -&gt; 10.78s]  И у меня все хорошо\n[10.78s -&gt; 12.98s]  Спасибо, пока\n(whisper) (base) yuriygavrilov@MacBookPro fastwhisper %<\/code><\/pre><p>тестовый файл тут<\/p>\n<div class=\"e2-text-audio\">\n<div class=\"e2-text-super-wrapper e2-jouele-wrapper\"><a class=\"jouele\" data-space-control=\"true\" data-length=\"14\" href=\"https:\/\/gavrilov.info\/audio\/test.mp3\">test.mp3<\/a><\/div>\n<\/div>\n<p>ограничений по времени нет, кормите его любыми файлами любой длины. Если нужно можно упростить запуск как хотите. На мак можно даже поставить действие на папку и при появлении там файлов типа mp3 они будут автоматически транскрибироваться.<\/p>\n<p>Буду делать через приложении на маке automator<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-29-v-04.39.57.png\" width=\"316\" height=\"342\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-21.04.40.png\" width=\"1134\" height=\"240\" alt=\"\" \/>\n<\/div>\n<p>Как то примерно так :)<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-21.38.38.png\" width=\"1228\" height=\"1198\" alt=\"\" \/>\n<\/div>\n<p>осталось прикрутить это а действие к папке<\/p>\n<p>кажись заработало :)<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.07.03.png\" width=\"132\" height=\"58\" alt=\"\" \/>\n<\/div>\n<p>Создалась транскрипция сама<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.07.58.png\" width=\"386\" height=\"282\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.08.33.png\" width=\"750\" height=\"280\" alt=\"\" \/>\n<\/div>\n<p>получилось в итоге вот так: Открываем Automator, настраиваем действие и все.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.10.06.png\" width=\"1184\" height=\"870\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.12.51.png\" width=\"2482\" height=\"490\" alt=\"\" \/>\n<\/div>\n<p>работает так: кидаем файл в папку тест, скрипт запускается, транскрипция появляется рядом. Все.<\/p>\n<p>Проверим качество модели на этом:<\/p>\n<div class=\"e2-text-audio\">\n<div class=\"e2-text-super-wrapper e2-jouele-wrapper\"><a class=\"jouele\" data-space-control=\"true\" href=\"http:\/\/a.gavrilov.info\/data\/posts\/AA_Cat_2025_v1.mp3\">AA_Cat_2025_v1.mp3<\/a><\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.24.14.png\" width=\"824\" height=\"558\" alt=\"\" \/>\n<\/div>\n<p>почти идеал 🤘<\/p>\n<p>Второй раз чуть иначе, но почти точно.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.37.19.png\" width=\"874\" height=\"546\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2025-05-27T22:15:27+03:00",
            "date_modified": "2025-05-29T04:42:50+03:00",
            "tags": [
                "AI",
                "Audio"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-174.png",
            "_date_published_rfc2822": "Tue, 27 May 2025 22:15:27 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "239",
            "_rss_enclosures": [
                {
                    "url": "https:\/\/gavrilov.info\/audio\/test.mp3",
                    "type": "audio\/mpeg",
                    "length": 42578
                },
                {
                    "url": "http:\/\/a.gavrilov.info\/data\/posts\/AA_Cat_2025_v1.mp3",
                    "type": "audio\/mpeg",
                    "length": ""
                }
            ],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css",
                    "jquery\/jquery.js",
                    "jouele\/jouele.css",
                    "jouele\/jouele.js"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-174.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-29-v-04.39.57.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-21.04.40.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-21.38.38.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.07.03.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.07.58.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.08.33.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.10.06.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.12.51.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.24.14.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-05-27-v-22.37.19.png"
                ]
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171e)"
}