返回列表 发帖

[文件操作] [已解决]批处理怎样利用ffmpeg合并mp3文件

本帖最后由 qd2024 于 2023-7-28 22:41 编辑

当前目录下有若干文件夹,每个文件夹时有若干MP3文件,每个文件里的MP3文件名前都有4位自然数编号

想以每个文件夹为单位,以自然数编号为顺序,把每个文件夹里的所有MP3文件合并为一个MP3文件,
新生成的MP3文件文件名与对应的文件夹名相同,
新生成的MP3文件与BAT文件放在同一级目录下。


举例文件
链接:https://pan.baidu.com/s/1l4Gw_QlPD9JHCbiAx-rV8w?pwd=gxi1
提取码:gxi1
--来自百度网盘超级会员V9的分享


感谢
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 29# 77七


    谢谢  有点事出门了  才回来  我测试一下 辛苦了

TOP

@echo off
rem 批处理保存为ansi编码格式
rem 使用前先备份
rem 第1次执行为备份文件名,第2次执行为恢复文件名。
rem 批处理在各目录下生成一个 listx.txt 保存原始文件名。各目录下mp3文件 “序号”不变、数量不变 前提下使用。
dir /b /s /a-d listx.txt 1>nul 2>&1 && goto :re
for /d %%d in (*) do (
pushd "%%d"
(for /f "delims=" %%i in ('dir /b /a-d *.mp3 ^|sort') do (
echo %%i
))>listx.txt
popd
)
pause
exit
:re
rem http://bbs.bathome.net/viewthread.php?tid=66400
setlocal enabledelayedexpansion
for /d %%d in (*) do (
pushd "%%d"
(for /f "delims=" %%i in ('dir /b /a-d *.mp3 ^|sort') do (
set /p str=
ren "%%i" "!str!"
))<"listx.txt"
del "listx.txt"
popd
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

回复 16# 77七


    你好 有没有什么办法  再转换完成后,将文件名中去掉的特殊符号再加回来。谢谢。

TOP

回复 26# 77七


    问题已经修正。

TOP

紧急通知:问题解决后,请不要大肆修改提问帖
最近几天,发现一些会员喜欢在问题解决后,大肆修改提问帖,甚至要求管理层删帖,这一行为影响十分恶劣:论坛所有的帖子,无论当初的问题有多么简单,都会给后来者以学习的机会,它们都是论坛宝贵的资料;如果大家在问题解决之后,把帖子修改得面目全非,甚至要求删帖,不仅是对跟帖者极大的不尊重,还会造成学习资料的破坏——如果大家都把帖子删掉,论坛还能剩下什么可供学习的资料呢?
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 24# 77七


    测试成功 所有问题都已解决  孩子已经开始使用练习 万分感谢

TOP

本帖最后由 77七 于 2023-8-7 00:50 编辑

回复 23# qd2024


  
@echo off
chcp 65001 >nul
rem 批处理保存为utf-8编码格式,需要ffmpeg ffprobe,自行修改相关路径
for /f "delims=" %%i in ('dir /b /s /a-d *.mp3') do (
        setlocal enabledelayedexpansion
        ffprobe -loglevel 0 -show_streams "%%i" |findstr /xc:"bit_rate=128000" 1>nul || set str1=-ab 128k
        ffprobe -loglevel 0 -show_streams "%%i" |findstr /xc:"sample_rate=44100" 1>nul || set str2=-ar 44100
        if not defined str1 if not defined str2 (
                ver >nul
        ) else (
                ffmpeg -i "%%i" !str1! !str2! "xxx.mp3"
                move /y "xxx.mp3" "%%i"
        )
        endlocal
)
pauseCOPY
20230807 修改一下 if not if not 这个不太规范,逻辑可能有时候会出问题。
@echo off
chcp 65001 >nul
rem 批处理保存为utf-8编码格式,需要ffmpeg ffprobe,自行修改相关路径
for /f "delims=" %%i in ('dir /b /s /a-d *.mp3') do (
setlocal enabledelayedexpansion
ffprobe -loglevel 0 -show_streams "%%i" |findstr /xc:"bit_rate=128000" 1>nul || set str1=-ab 128k
ffprobe -loglevel 0 -show_streams "%%i" |findstr /xc:"sample_rate=44100" 1>nul || set str2=-ar 44100
if "!str1!!str2!" neq "" (
ffmpeg -i "%%i" !str1! !str2! "xxx.mp3"
move /y "xxx.mp3" "%%i"
)
endlocal
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

回复 21# 77七


    还是不行 刚刚查了之前的代码  有一个位置  设置的是44100   这个是采样率吧
      我在Adobe Audition中 把几个有问题的MP3调整采样率到44100  再进行后面的操作 就可以顺利进行了

     还是不知道其他文件什么时假会有问题  再帮我看看 ffmpeg ffprobe 能不能实现 批量查找采样率  把不是44100的改成44100

感谢

TOP

回复 8# qd2024


MP3文件改名只保留前4位序号.bat
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /s /a-d *.mp3') do (
    set "OldName=%%~ni"
    set "NewName=!OldName:~0,4!%%~xi"
    ren "%%i" "!NewName!"
)COPY
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 20# qd2024


  
@echo off
chcp 65001 >nul
rem 批处理保存为utf-8编码格式,需要ffmpeg ffprobe,自行修改相关路径
for /f "delims=" %%i in ('dir /b /s /a-d *.mp3') do (
for /f "tokens=1-2 delims==" %%a in ('ffprobe -loglevel 0 -show_streams "%%i" ^|findstr /bc:"bit_rate="') do (
if not "%%b" equ "128000" (
ffmpeg -i "%%i" -ab 128k "xxx.mp3"
move /y "xxx.mp3" "%%i"
)
)
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

本帖最后由 qd2024 于 2023-7-28 12:00 编辑

回复 19# 77七


    好  能用ffmpeg统一当前目录(含子目录)下所有mp3文件的比特率吗?  比如统一到128

我对比了 出错的文件 比特率都不是128   因为 我手里大部分的都是128

帮我研究一下 用ffmpeg调整比特率  如果是128的就忽略,如果不是就调整到128

十分感谢

TOP

回复 18# qd2024


   ffmpeg对于音视频的处理比较粗糙,如果不行,得寻找更专业的软件,或者高明的代码处理,得专业的人来干。
bat小白,请多指教!谢谢!

TOP

回复 16# 77七


    不知道什么原因 测试文件  合并后  只有0145black-and-white这个合并后 英文中文都能播放  其他的几个文件  只能播放英文    把文件放到音频编辑软件后   发现有中文的部分  但音波播放时变声了
  尝试把文件名中的空格变成“-”或删除  还是这样

辛苦 帮忙分析一下原因

TOP

回复 15# qd2024


    只是改名,但我觉得影响执行的应该不是点,反而是空格括号之类的。。。
dir *.txt | Rename-Item -NewName {($_.BaseName -replace '[ .]','')+$_.Extension}COPY

TOP

返回列表