2016-12-17 49 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

感謝您的代碼。我會測試它並讓你知道結果。 –