.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:
- Перейди по ссылке:
https://ffmpeg.org/download.html - Нажми на кнопку Windows → затем выбери ссылку:
Windows builds by gyan.dev
(или переходи сразу сюда: https://www.gyan.dev/ffmpeg/builds/) - На странице найди раздел:
"Release builds"
И скачай файл:ffmpeg-release-essentials.zip - Распакуй архив. Внутри будет папка
bin, а в ней —ffmpeg.exe.
Как использовать:
- Скопируй этот код в файл, например,
split_wav.bat. - Помести его в ту же папку, где находятся WAV-файлы.
- Убедись, что
ffmpeg.exeлибо:
- находится в этой же папке, либо
- прописан в переменной окруженияPATH(чтобы можно было вызывать его из любого места). - Дважды щёлкни по
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
==============================

