2016-12-17 18 views
1

我使用这些代码创建卡拉OK并将其刻录到VCD。需要批量命令自动创建卡拉OK

xxxxxx_1.m4a文件左声道(器乐), xxxxxx_0.m4a文件是右声道(带有声乐的歌曲)。 将它们组合到become xxxxxx.m4a

ffmpeg -i 123456_1.m4a -i 123456_0.m4a -filter_complex "[0:a][1:a]amerge=inputs=2,pan=stereo|c0<c0+c1|c1<c2+c3[aout]" -map "[aout]" 123456.m4a 

xxxxxx_3.mp4文件是一个没有声音的视频。 结合xxxxxx_3.mp4xxxxxx.m4a成为卡拉OK视频。

ffmpeg -i 123456_3.mp4 -i 123456.m4a -c:v copy -c:a copy 123456.mp4 

转换的xxxxxx.mp4.mpg格式,并刻录成VCD。

ffmpeg -i 123456.mp4 -target pal-vcd 123456.mpg 

所有这些123456_1.m4a123456_0.m4a123456_3.mp4在同一个文件夹中。 这只是一首歌。我有很多需要转换的歌曲,我不想复制和粘贴每首歌曲来执行此任务。

我尝试使用for /f命令来自动执行此转换,但未成功。

+1

见'设置/'子字符串操作?你不需要'/ f'开关就可以使用'For'。见'For /?'。你也可以用'〜'来限定变量来使用路径的一部分。所以'%〜dpn0'是没有批处理文件扩展名的路径。同上命令 - '%%〜dpnA'。见'for /?'和'call /?'。 – 2016-12-17 07:13:09

+1

通常'for/f'就是要走的路。你可以添加你尝试过的吗? –

回答

0

像这样(未经):

@Echo off 
Set "Base=X:\path\to\your\folder" 
PushD "%Base%"2>Nul ||(Echo Can't change to %Base% &Pause&Exit /B 1) 
For %%A in (*_3.mp4) Do For /f "Delims=_" %%B in ("%%A") Do Call :Assemble "%%~A" "%%~B" 
PopD 
Goto :Eof 
:Assemble 
Echo Processing %~2 
If Not Exist "%~2_0.m4a" (Echo %~2 right channel missing& Goto :Eof) 
If Not Exist "%~2_1.m4a" (Echo %~2 left channel missing& Goto :Eof) 
ffmpeg -i "%~2_1.m4a" -i "%~2_0.m4a" -filter_complex "[0:a][1:a]amerge=inputs=2,pan=stereo|c0<c0+c1|c1<c2+c3[aout]" -map "[aout]" "%~2.m4a" 
ffmpeg -i %1 -i "%~2.m4a" -c:v copy -c:a copy "%~2.mp4" 
ffmpeg -i "%~2.mp4" -target pal-vcd "%~2.mpg" 
+0

只需在第3行的双管之前添加'2> Nul'即可。您正在对其编码以查找可能的错误,但不会重定向该错误消息,如果您之前没有包含您自己的错误消息,则可以使用。 – Compo

+0

@Compo同意并更改。感谢提示。 – LotPings

+0

感谢您的代码。我会测试它并让你知道结果。 –