标题: [文件操作] [已解决]如何用ffmpeg批量把比特率大于192kbs的mp3文件转成128kbs的? [打印本页]
作者: pendave 时间: 2015-1-28 15:14 标题: [已解决]如何用ffmpeg批量把比特率大于192kbs的mp3文件转成128kbs的?
本帖最后由 pendave 于 2015-1-30 23:18 编辑
想批量把mp3文件转成128kbs的。
我参看了国外的帖子
http://superuser.com/questions/157366/what-is-a-good-way-to-batch-re-encode-mp3-files-from-a-higher-bitrate-to-a-lower
说可以用ffmpeg的命令行来操作 http://www.ffmpeg.org/download.html
Advanced: if you are into command lines, you can download ffmpeg and use the below command line to convert a file: ffmpeg -i source.mp3 -vn -ar 44100 -ac 2 -ab 128 -f mp3 output.mp3
If you put it into a batch file, you can convert a whole bunch at once. mine looks like this:
convert.bat- set formats=*.mp3 *.mp4 *.flv
- set presets=-vn -ar 44100 -ac 2 -ab 128k -vol 400 -f mp3
- set outputext=mp3
- set "convert=C:\Program Files (x86)\FormatFactory\FFModules\Encoder\ffmpeg.exe"
-
- for %%g in (%formats%) do start /b /wait "" "%convert%" -i "%~dp0%%g" %presets% "%~dp0%%~ng.%outputext%" && TITLE "Converted: "%%g -y
复制代码
那个for循环我看不懂,而且我用它不能正常转换,得到的文件才89k 恐怖....
高手能帮忙改下能用的吗?谢谢啊
作者: pendave 时间: 2015-1-28 16:31
本帖最后由 pendave 于 2015-1-28 17:18 编辑
研究了下,这个代码可以用了- @echo off
-
- set outputext=128kbs
- for %%i in (*.mp3) do "C:\Program Files (x86)\FormatFactory\FFModules\Encoder\ffmpeg.exe" -i "%%i" -acodec libmp3lame -ab 128k "%%~ni.%outputext%.mp3"
-
- PAUSE
复制代码
但是这个会把所有mp3都转换一遍,有的128kbs的也被重复转成128kbs的, 怎么判断一下呢,只想要bitrate 大于等于192kbs 的mp3文件才转换!
求高手!谢谢
这里看到 .bat .vbs 配合获取mp3信息的代码
http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/Q_27077456.html
Batch File Read File Attributes advanced.bat- @echo off
- setlocal
- set FileName=C:\test.mp3
- for /F "tokens=1* delims==" %%A in ('cscript getinfo.vbs "%FileName%"') do set _prop_%%A=%%B
- set _prop
复制代码
getinfo.vbs- if (WScript.Arguments.Count > 0) Then
- strFile = WScript.Arguments(0)
- Else
- WScript.Echo "ERROR : No input filename specified."
- WScript.Quit -1
- End If
-
- Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
-
- If Not objFSO.FileExists(strFile) then
- WScript.Echo "ERROR : Input filename specified does not exist."
- WScript.Quit -1
- End If
-
- Set objFile = objFSO.GetFile(strFile)
- strFolder = objFile.ParentFolder
-
- Dim strAttrName(300)
-
- Set objShell = CreateObject("Shell.Application")
- Set objFolder = objShell.NameSpace(strFolder)
-
- for N = 0 To 300
- strAttrName(N) = Replace(objFolder.GetDetailsOf(Nothing, N), " ", "_")
- Next
-
- Set objFileItem = objFolder.ParseName(objFile.Name)
-
- For i = 0 To 300
- if objFolder.GetDetailsOf(objFileItem, i) <> "" Then
- If Instr("objFolder.GetDetailsOf(objFileItem, i)", Chr(63)) then Wscript.Echo "FOUND"
- WScript.Echo strAttrName(i) & "=" & Replace(objFolder.GetDetailsOf(objFileItem, i), Chr(63), "")
- End If
- Next
-
- Wscript.Quit 0
复制代码
作者: apang 时间: 2015-1-28 21:53
本帖最后由 apang 于 2015-1-29 11:11 编辑
自己改下- @set @n=0;/* & echo off
- for /f "delims=" %%i in ('dir/b *.mp3^|cscript -nologo -e:jscript "%~0"')do (
- echo,%%i
- )
- pause & exit/b & rem */
-
- fd = WScript.ScriptFullName.match(/^(.*)\\/)[1];
- objShell = new ActiveXObject("Shell.Application");
- objFolder = objShell.NameSpace(fd);
- i = 0;
-
- while (true) {
- strAttrName = objFolder.GetDetailsOf(null, i);
- if (strAttrName == "比特率" || strAttrName == "位速") {
- break;
- } else i++
- }
-
- while (!WScript.StdIn.AtEndOfStream) {
- f = WScript.StdIn.ReadLine();
- objFolderItem = objFolder.ParseName(f);
- bitRate = objFolder.GetDetailsOf(objFolderItem, i);
- if (bitRate.match(/\d+/)[0] >= 128) WScript.Echo(f);
- //大于等于 128 kbps
- }
复制代码
作者: pendave 时间: 2015-1-29 00:00
回复 3# apang
为啥我用- set "encode=C:\Program Files (x86)\FormatFactory\FFModules\Encoder\ffmpeg.exe"
复制代码
运行就会报错:
此时不应有 \FormatFactory\FFModules\Encoder\ffmpeg.exe。
我都只好用这种形式,不过太长了- "C:\Program Files (x86)\FormatFactory\FFModules\Encoder\ffmpeg.exe" -i "%%i" -acodec libmp3lame -ab 128k "%%~ni.%outputext%.mp3"
复制代码
这个是bug吗?
作者: hfg1977 时间: 2015-1-29 09:59
foobar采用LAME编解码,支持多种码率批量转换。
喜欢音乐的没几个不用吧。 建议你试试。
当然批处理还要好好学。
作者: DAIC 时间: 2015-1-31 04:27
回复 4# pendave
报错的原因可能是双引号没加对地方,完整代码发出来看看。
作者: pendave 时间: 2015-1-31 16:31
回复 5# hfg1977
LAME编解码 我昨天试了下,差不多的
http://www.rarewares.org/mp3-lame-bundle.php
在这里下 lame.exe 包
作者: pendave 时间: 2015-1-31 16:32
回复 6# DAIC
我用了 就好了- set encode="C:\Program Files (x86)\FormatFactory\FFModules\Encoder\ffmpeg.exe"
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |