Хабр Курсы для бэкендеров
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

Спасибо! Сам когда то довольно много занимался обработкой звука, но правда не C++ поэтому все решения для накопления опыта весьма полезны. Да, хотелось бы расширения функционала, ближе к обычным редакторам. Например , наоборот разбиение, или вырезка участков и т.п.
ffmpeg в терминале - вариант для гиков, но и у него свои проблемы.
Просто перетаскиваем mp3 файлы в проводнике на bat скрипт и все работает мгновенно и без перекодировки. Куда уж проще.
@echo off
setlocal EnableDelayedExpansion
rem ---------- check ffmpeg ----------
where ffmpeg >nul 2>&1
if errorlevel 1 (
echo Error: ffmpeg not found in PATH.
set "ERROR_OCCURRED=1"
goto :cleanup
)
rem ---------- temporary files ----------
set "RAW_LIST=%temp%\ffmpeg_raw_list.txt"
set "SORTED_LIST=%temp%\ffmpeg_sorted_list.txt"
set "FFMPEG_LIST=%temp%\ffmpeg_concat_input.txt"
del /q "!RAW_LIST!" 2>nul
del /q "!SORTED_LIST!" 2>nul
del /q "!FFMPEG_LIST!" 2>nul
set "MP3_FOUND=0"
set "FIRST_MP3_PATH="
rem ---------- collect arguments ----------
:arg_loop
if "%~1"=="" goto :args_done
if /i "%~x1"==".mp3" (
set "MP3_FOUND=1"
set "FULL_PATH=%~f1"
echo !FULL_PATH!>>"!RAW_LIST!"
)
shift
goto :arg_loop
:args_done
rem ---------- no mp3 supplied ----------
if !MP3_FOUND! equ 0 (
echo Error: No MP3 files supplied as arguments.
set "ERROR_OCCURRED=1"
goto :cleanup
)
rem ---------- ensure list not empty ----------
if not exist "!RAW_LIST!" (
echo Error: No valid MP3 file data found.
set "ERROR_OCCURRED=1"
goto :cleanup
)
rem ---------- sort by filename ----------
sort "!RAW_LIST!" /o "!SORTED_LIST!"
rem ---------- build ffmpeg concat list ----------
for /f "usebackq delims=" %%F in ("!SORTED_LIST!") do (
if not defined FIRST_MP3_PATH set "FIRST_MP3_PATH=%%F"
set "CLEAN=%%F"
set "CLEAN=!CLEAN:'='\''!"
echo file '!CLEAN!'>>"!FFMPEG_LIST!"
)
rem ---------- determine output filename ----------
if not defined FIRST_MP3_PATH (
echo Error: Could not determine first MP3 file for output name.
set "ERROR_OCCURRED=1"
goto :cleanup
)
for %%I in ("!FIRST_MP3_PATH!") do set "OUTFILE=%%~nI_merged.mp3"
rem ---------- run ffmpeg ----------
ffmpeg -hide_banner -loglevel error -f concat -safe 0 -i "!FFMPEG_LIST!" -c copy "!OUTFILE!"
if errorlevel 1 (
echo Error: ffmpeg failed.
set "ERROR_OCCURRED=1"
) else (
echo Successfully created "!OUTFILE!".
)
rem ---------- cleanup ----------
:cleanup
del /q "!RAW_LIST!" 2>nul
del /q "!SORTED_LIST!" 2>nul
del /q "!FFMPEG_LIST!" 2>nul
if !ERROR_OCCURRED! equ 1 pause
endlocal
Вайбкодил gemini 3 flash
Web Audio API, lamejs и 0 байт на бэкенде: пишу MP3-склейщик целиком в браузере