Нарезка .wav файлов

Board index Администрирование Batch (CMD/BAT)

Description: Создание командных файлов Windows

#1by mexan » 20.04.2025, 21:14

Скрипт автоматизирует процесс разбиения .wav-аудиофайлов на части фиксированной длительности с именованием по дате и времени, извлечённым из исходного имени файла. Готовые сегменты сохраняются в указанную выходную папку.
Скрипт использует FFmpeg, так что убедись, что ffmpeg.exe есть либо в той же папке, либо в переменной PATH.

Основные функции:
  • Обрабатывает все .wav-файлы в текущей директории.
  • Из имени файла берёт дату и время начала записи (начиная с 6-го символа).
    Пример исходного имени: abcde20250421060000.wav
  • Разбивает каждый файл на сегменты по 2 часа 30 минут (9000 секунд).
  • Присваивает каждому сегменту новое имя по шаблону:
    Code: Select all
    12345ГГГГММДДЧЧММСС.wav
    где 12345 — фиксированный префикс, а ГГГГММДДЧЧММСС — время начала конкретного сегмента.
  • Готовые фрагменты сохраняются в подпапку SOUND.
  • Временные файлы очищаются после завершения работы.
  • Ведёт лог в файл script_log.txt: дата запуска, имя обрабатываемого файла, время начала, имена всех созданных сегментов, общее количество.
  • Также логируется общее количество успешно обработанных и пропущенных файлов.

Code: Select all
@echo off
chcp 65001
setlocal EnableDelayedExpansion

:: Длительность каждого сегмента — 2 часа 30 минут (в секундах)
set SEGMENT_DURATION=9000

:: Фиксированный префикс
set "prefix=12345"

:: Папка для готовых файлов
set "output_folder=SOUND"
if not exist "!output_folder!" mkdir "!output_folder!"

:: Временная папка для сегментов
set "temp_folder=temp_segments"
if not exist "!temp_folder!" mkdir "!temp_folder!"

:: Лог-файл
set "logfile=script_log.txt"
echo === Запуск: %DATE% %TIME% ===>> "%logfile%"

:: Счётчики
set /a total_processed=0
set /a total_skipped=0

:: Обработка всех .wav файлов
for %%f in (*.wav) do (
    set "fullfile=%%~nxf"
    set "filename=%%~nf"
    set "extension=%%~xf"

    :: Проверка: имя должно содержать минимум 19 символов (5 + 14)
    set "datetime=!filename:~5!"
    if "!datetime!"=="" (
        echo ПРОПУЩЕН: %%f — не удалось извлечь дату >> "%logfile%"
        set /a total_skipped+=1
        goto :continue
    )
    if not "!datetime:~13,1!"=="" (
        echo ПРОПУЩЕН: %%f — имя слишком короткое или дата некорректна >> "%logfile%"
        set /a total_skipped+=1
        goto :continue
    )

    echo === Обработка файла: !fullfile!
    echo Обработка файла: !fullfile! >> "%logfile%"
    echo Стартовая дата-время: !datetime! >> "%logfile%"

    :: Преобразуем дату во внутренний формат ISO
    set "startdatetime=!datetime:~0,4!-!datetime:~4,2!-!datetime:~6,2!T!datetime:~8,2!:!datetime:~10,2!:!datetime:~12,2!"

    :: Разбиваем на сегменты
    ffmpeg -i "%%f" -f segment -segment_time %SEGMENT_DURATION% -c copy "!temp_folder!\segment_%%03d.wav"

    set /a i=0
    set /a segment_count=0

    for %%s in (!temp_folder!\segment_*.wav) do (
        powershell -Command ^
            "$t = [datetime]'!startdatetime!';" ^
            "$newtime = $t.AddSeconds(%SEGMENT_DURATION% * !i!);" ^
            "Write-Output $newtime.ToString('yyyyMMddHHmmss')" > time.txt
        set /p segmenttime=<time.txt
        del time.txt

        set "newname=!prefix!!segmenttime!.wav"
        move "%%s" "!output_folder!\!newname!" >nul

        echo Создан файл: !output_folder!\!newname!
        echo Создан файл: !output_folder!\!newname! >> "%logfile%"

        set /a i+=1
        set /a segment_count+=1
    )

    echo Сегментов создано: !segment_count! >> "%logfile%"
    echo ------------------------------ >> "%logfile%"
    set /a total_processed+=1

    :continue
)

:: Удаляем временные файлы
rd /s /q "!temp_folder!" 2>nul

:: Финал в лог
echo === Завершено: %DATE% %TIME% ===>> "%logfile%"
echo Обработано файлов: %total_processed% >> "%logfile%"
echo Пропущено файлов: %total_skipped% >> "%logfile%"
echo ============================== >> "%logfile%"

echo === Все файлы обработаны ===
echo Лог сохранён в %logfile%
pause

Как скачать ffmpeg.exe для Windows:
  1. Перейди по ссылке:
    https://ffmpeg.org/download.html
  2. Нажми на кнопку Windows → затем выбери ссылку:
    Windows builds by gyan.dev
    (или переходи сразу сюда: https://www.gyan.dev/ffmpeg/builds/)
  3. На странице найди раздел:
    "Release builds"
    И скачай файл:
    ffmpeg-release-essentials.zip
  4. Распакуй архив. Внутри будет папка bin, а в ней — ffmpeg.exe.

Как использовать:
  1. Скопируй этот код в файл, например, split_wav.bat.
  2. Помести его в ту же папку, где находятся WAV-файлы.
  3. Убедись, что ffmpeg.exe либо:
    - находится в этой же папке, либо
    - прописан в переменной окружения PATH (чтобы можно было вызывать его из любого места).
  4. Дважды щёлкни по split_wav.bat — и он начнёт нарезку.

Пример входных и выходных данных:
Входной файл:
Code: Select all
abcde20250421060000.wav
Выходные файлы:
Code: Select all
SOUND\1234520250421060000.wav
SOUND\1234520250421083000.wav
SOUND\1234520250421110000.wav
Пример логов:
Code: Select all
=== Запуск: 21.04.2025 16:05:12 ===
Обработка файла: abcde20250421060000.wav
Стартовая дата-время: 20250421060000
Создан файл: SOUND\1234520250421060000.wav
Создан файл: SOUND\1234520250421083000.wav
Создан файл: SOUND\1234520250421110000.wav
Сегментов создано: 3
------------------------------
ПРОПУЩЕН: file1.wav — не удалось извлечь дату
ПРОПУЩЕН: badname.wav — имя слишком короткое или дата некорректна
=== Завершено: 21.04.2025 16:05:32 ===
Обработано файлов: 1
Пропущено файлов: 2
==============================
Image
mexan
Администратор
Reputation: 0
Posts: 167
Topics: 129

Return to Batch (CMD/BAT)