Обновить

Комментарии 2

Спасибо! Сам когда то довольно много занимался обработкой звука, но правда не 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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации