标题: [文件操作] [已解决]批处理怎样利用ffmpeg合并mp3文件 [打印本页]
作者: qd2024 时间: 2023-7-27 10:33 标题: [已解决]批处理怎样利用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的分享
感谢
作者: 77七 时间: 2023-7-27 11:07
- @echo off
- chcp 65001 >nul
- rem 批处理保存为utf-8编码格式,需要ffmpeg
- for /d %%d in (*) do (
- pushd "%%d"
- (for /f "delims=" %%i in ('dir /b /a-d *.mp3 ^|sort') do (
- echo file '%%~fi'
- ))>xxx.txt
- if exist xxx.txt if not exist "%~dp0%%~nxd.mp3" (
- "%~dp0ffmpeg.exe" -f concat -safe 0 -i xxx.txt -c copy "%~dp0%%~nxd.mp3"
- )
- del xxx.txt 2>nul
- popd
- )
- pause
复制代码
作者: qd2024 时间: 2023-7-27 11:22
回复 2# 77七
感谢
作者: qd2024 时间: 2023-7-27 11:55
回复 2# 77七
好像是因为文件名里有特殊字符 合并过程 终止了 合并的不完整
帮忙修改一下 谢谢
举例文件
链接:https://pan.baidu.com/s/1l4Gw_QlPD9JHCbiAx-rV8w?pwd=gxi1
提取码:gxi1
--来自百度网盘超级会员V9的分享
作者: 77七 时间: 2023-7-27 13:02
回复 4# qd2024
文件名- 0106do①s⑶(1)
- 0040to①s⑴(1)
- 0015I'm=I am(1)
复制代码
太特殊了,我不会处理
只能重命名。
以下代码执行完第一个,再执行第二个,注意编码格式。
- @echo off
- rem 批处理保存为ansi编码格式
- setlocal enabledelayedexpansion
- for /d %%d in (*) do (
- robocopy "%%d" "%%d-copy" *.mp3
- pushd "%%d-copy"
- set n=100000
- (for /f "delims=" %%i in ('dir /b /a-d *.mp3 ^|sort') do (
- set /a n+=1
- ren "%%i" "!n:~-5!.mp3"
- echo file '!n:~-5!.mp3'
- ))>xxx.txt
- popd
- )
- exit
复制代码
- @echo off
- chcp 65001 >nul
- rem 批处理保存为utf-8编码格式,需要ffmpeg
- for /f "delims=" %%d in ('dir /b /ad ^|find /v "-copy"') do (
- pushd "%%d-copy"
- if exist xxx.txt if not exist "%~dp0%%~nxd.mp3" (
- ffmpeg -f concat -safe 0 -i xxx.txt -c copy "%~dp0%%~nxd.mp3"
- )
- del xxx.txt 2>nul
- popd
- rd /s /q "%%d-copy"
- )
- pause
复制代码
作者: 77七 时间: 2023-7-27 13:13
ffmpeg 改为 "%~dp0ffmpeg.exe"
经常用的话,可以添加到计算机的环境变量
作者: qd2024 时间: 2023-7-27 16:31
回复 6# 77七
辛苦了 我试试
作者: qd2024 时间: 2023-7-27 16:54
本帖最后由 qd2024 于 2023-7-27 16:59 编辑
回复 5# 77七
我推断是因为有特殊除号的原因,造成
这一步 http://www.bathome.net/thread-66889-1-1.html
还有这一步 http://www.bathome.net/thread-66899-1-1.html
这两步生成后文件都有丢失,
能不能这样,先清除当前目录及子目录下所有MP3文件文件名中的特殊符号,再执行
http://www.bathome.net/redirect. ... 6899&pid=271596这个代码 因为每个文件夹内的文件都有4位编号,所以文件顺序不会乱
特殊符号包括,“半角空格 … ?. , ' = ① ② ③ ④ ⑤ ⑥ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂”
目前想到的是这些,在引号中用半角空格分开,如果再有新的,我再手动处理。
或者可以把MP3文件改名,不是重新生成,而是直接改名,只保留前4位序号,是否可行,这样就没有特殊符号的干扰了
孩子初三了刚刚醒悟要学习,单词突击中,万分感谢
作者: 77七 时间: 2023-7-27 17:44
本帖最后由 77七 于 2023-7-27 17:53 编辑
回复 8# qd2024
- @echo off
- rem http://www.bathome.net/redirect.php?goto=findpost&ptid=63860&pid=259594
- rem 删除当前目录及子目录下 所有文件夹名、文件名中的符号; “_”、“-”、“.” 这三个除外,我自己瞎改的。
- powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\s\-\w\.]')}"
- exit
复制代码
那就使用原始代码好了,每次先使用上面的代码清除文件(夹)名称中的符号。忽略报错信息。
作者: qd2024 时间: 2023-7-27 18:04
本帖最后由 qd2024 于 2023-7-27 18:08 编辑
回复 9# 77七
“_”、“-”、“.” 这三个除外,我自己瞎改的。 这个是什么意思 没明白
运行报错 我没有弄明白 截图放百度盘了
举例文件
链接:https://pan.baidu.com/s/1l4Gw_QlPD9JHCbiAx-rV8w?pwd=gxi1
提取码:gxi1
--来自百度网盘超级会员V9的分享
作者: 77七 时间: 2023-7-27 18:13
回复 10# qd2024
直接使用就行,忽略报错信息。
作者: qd2024 时间: 2023-7-27 19:13
本帖最后由 qd2024 于 2023-7-27 19:40 编辑
回复 11# 77七
powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\s\-\w]')}"
我把后面的.删除了 但是扩展名里的.也没了
怎样才能不改名扩展名
特殊符号还有" ( " ")"
------------
sb. can't wait 类似的 .'没用被删除
作者: 77七 时间: 2023-7-27 19:47
回复 12# qd2024
我测试9楼的代码,正常删除 " ( " ")",重复执行试试。
作者: qd2024 时间: 2023-7-27 20:00
回复 13# 77七
检查了一下 是我的原始文件出错了 我再试试
作者: qd2024 时间: 2023-7-28 08:11
本帖最后由 qd2024 于 2023-7-28 08:37 编辑
回复 13# 77七
0108take part in sth.
0100take sb.s temperature
0129cant help doing sth.
帮我想个办法,让9楼代码,在执行时,删除文件名中的“.”,比如sb. sth.后面的点,
目前发现 只要单个文件中有“.”,执行合并文件后,对应该的单词短语音频就会重复好几遍,而且音频会变调。
在进行中英文合并时,不能把单个单词的英文和中文音频合并成一个文件,只提取到了英文的音频。
我放文件到百度盘了
链接:https://pan.baidu.com/s/1l4Gw_QlPD9JHCbiAx-rV8w?pwd=gxi1
提取码:gxi1
--来自百度网盘超级会员V9的分享
=============================
再帮我看看这个 文件变静音。
http://www.bathome.net/viewthread.php?tid=66911&extra=
感谢
作者: 77七 时间: 2023-7-28 10:36
本帖最后由 77七 于 2023-7-28 10:38 编辑
回复 15# qd2024
没想到点号对于ffmpeg还有影响。
- @echo off
- rem 当前目录下的子目录中只存在mp3文件,用于去除所有符号,不含 “-_” 及扩展名中的点号
- for /d %%d in (*) do (
- pushd "%%d"
- ren "*.mp3" "*."
- powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\s\-\w]')}"
- ren "*" "*.mp3"
- popd
- )
复制代码
作者: wanghan519 时间: 2023-7-28 10:49
回复 15# qd2024
只是改名,但我觉得影响执行的应该不是点,反而是空格括号之类的。。。- dir *.txt | Rename-Item -NewName {($_.BaseName -replace '[ .]','')+$_.Extension}
复制代码
作者: qd2024 时间: 2023-7-28 10:56
回复 16# 77七
不知道什么原因 测试文件 合并后 只有0145black-and-white这个合并后 英文中文都能播放 其他的几个文件 只能播放英文 把文件放到音频编辑软件后 发现有中文的部分 但音波播放时变声了
尝试把文件名中的空格变成“-”或删除 还是这样
辛苦 帮忙分析一下原因
作者: 77七 时间: 2023-7-28 11:35
回复 18# qd2024
ffmpeg对于音视频的处理比较粗糙,如果不行,得寻找更专业的软件,或者高明的代码处理,得专业的人来干。
作者: qd2024 时间: 2023-7-28 11:49
本帖最后由 qd2024 于 2023-7-28 12:00 编辑
回复 19# 77七
好 能用ffmpeg统一当前目录(含子目录)下所有mp3文件的比特率吗? 比如统一到128
我对比了 出错的文件 比特率都不是128 因为 我手里大部分的都是128
帮我研究一下 用ffmpeg调整比特率 如果是128的就忽略,如果不是就调整到128
十分感谢
作者: 77七 时间: 2023-7-28 12:42
回复 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"
- )
- )
- )
- pause
复制代码
作者: Batcher 时间: 2023-7-28 13:47
回复 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!"
- )
复制代码
作者: qd2024 时间: 2023-7-28 14:30
回复 21# 77七
还是不行 刚刚查了之前的代码 有一个位置 设置的是44100 这个是采样率吧
我在Adobe Audition中 把几个有问题的MP3调整采样率到44100 再进行后面的操作 就可以顺利进行了
还是不知道其他文件什么时假会有问题 再帮我看看 ffmpeg ffprobe 能不能实现 批量查找采样率 把不是44100的改成44100
感谢
作者: 77七 时间: 2023-7-28 15:34
本帖最后由 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
- )
- pause
复制代码
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
- )
- pause
复制代码
作者: qd2024 时间: 2023-7-28 19:53
回复 24# 77七
测试成功 所有问题都已解决 孩子已经开始使用练习 万分感谢
作者: 77七 时间: 2023-7-28 20:26
紧急通知:问题解决后,请不要大肆修改提问帖最近几天,发现一些会员喜欢在问题解决后,大肆修改提问帖,甚至要求管理层删帖,这一行为影响十分恶劣:论坛所有的帖子,无论当初的问题有多么简单,都会给后来者以学习的机会,它们都是论坛宝贵的资料;如果大家在问题解决之后,把帖子修改得面目全非,甚至要求删帖,不仅是对跟帖者极大的不尊重,还会造成学习资料的破坏——如果大家都把帖子删掉,论坛还能剩下什么可供学习的资料呢?
作者: qd2024 时间: 2023-7-28 22:43
回复 26# 77七
问题已经修正。
作者: qd2024 时间: 2023-7-29 12:56
回复 16# 77七
你好 有没有什么办法 再转换完成后,将文件名中去掉的特殊符号再加回来。谢谢。
作者: 77七 时间: 2023-7-29 14:35
- @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
- )
- pause
复制代码
作者: qd2024 时间: 2023-8-4 08:19
回复 29# 77七
谢谢 有点事出门了 才回来 我测试一下 辛苦了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |