【发布时间】:2020-08-28 03:42:50
【问题描述】:
这个批处理文件不起作用,我知道 ffmpeg 命令在单独运行时起作用。
我使用的 WAV 文件与视频的长度完全相同(它是从我尝试添加回的视频中提取的)。
如果我从 ffmpeg.exe 和批处理文件所在的文件夹中删除 wav 和/或视频文件,NOAUDIO 和 NOVIDEO 标签会正常工作。
当批处理文件与 wav 音频和 mp4 视频文件一起运行时,它只会闪现一个命令窗口。我尝试在每个命令后暂停,但仍然没有乐趣。
这里有错误吗?
各位干杯...
:: --------------------
::
:: This will put any included WAV file with any included
:: video file, assuming the video file type exists:
::
:: - AVI
:: - MKV
:: - MP4
:: - WEBM
::
:: --------------------
@echo off
title Replace Video Audio with WAV
color 0f
:: --------------------
if not exist *.wav goto NOAUDIO
if not exist *.avi if not exist *.mkv if not exist *.mp4 if not exist *.webm goto NOVIDEO
:: --------------------
if exist *.avi goto AVIFILE
if exist *.mkv goto MKVFILE
if exist *.mp4 goto MP4FILE
if exist *.webm goto WEBMFILE
:: --------------------
For %%a IN ("*.wav") DO Set "FILEWAV=%%~na"
:: --------------------
:AVIFILE
For %%a IN ("*.avi") DO Set "FILEAVI=%%~na"
start /wait ffmpeg.exe -i "%FILEAVI%.avi" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEAVI%-NEW.mp4"
goto FINISHED
:MP4FILE
For %%a IN ("*.mp4") DO Set "FILEMP4=%%~na"
start /wait ffmpeg.exe -i "%FILEMP4%.mp4" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEMP4%-NEW.mp4"
goto FINISHED
:WEBMFILE
For %%a IN ("*.webm") DO Set "FILEWEBM=%%~na"
start /wait ffmpeg.exe -i "%FILEWEBM%.webm" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEWEBM%-NEW.mp4"
goto FINISHED
:MKVFILE
For %%a IN ("*.mkv") DO Set "FILEMKV=%%~na"
start /wait ffmpeg.exe -i "%FILEMKV%.mkv" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEMKV%-NEW.mp4"
goto FINISHED
:: --------------------
:NOAUDIO
cls
echo.
echo.
echo There is no audio to put with the video!
echo.
echo Exiting...
timeout 6 >nul
goto FINISHED
:: --------------------
:NOVIDEO
cls
echo.
echo.
echo There is no video to put audio with!
echo.
echo Exiting...
timeout 6 >nul
goto FINISHED
:: --------------------
:FINISHED
exit
:: --------------------
我刚刚对此进行了测试,它确实有效,使用与上述批处理文件中完全相同的命令,只是删除了所有标签...
For %%a IN ("*.wav") DO Set FILEWAV=%%~na
:MP4FILE
For %%a IN ("*.mp4") DO Set FILEMP4=%%~na
start /wait ffmpeg.exe -i "%FILEMP4%.mp4" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEMP4%-NEW.mp4"
goto FINISHED
:FINISHED
exit
所以我知道它不起作用的原因与批处理文件的运行顺序有关。这很奇怪,因为我有另一个批处理文件,就像它首先用于提取 WAV 并且确实有效,标签的设置就像上面的第一个批处理文件一样。令人困惑。
如果我把它简化为这个,它会起作用......
For %%a IN ("*.wav") DO Set FILEWAV=%%~na
For %%a IN ("*.avi") DO Set FILEAVI=%%~na
start /wait ffmpeg.exe -i "%FILEAVI%.avi" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEAVI%-NEW.mp4"
For %%a IN ("*.mp4") DO Set FILEMP4=%%~na
start /wait ffmpeg.exe -i "%FILEMP4%.mp4" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEMP4%-NEW.mp4"
For %%a IN ("*.webm") DO Set FILEWEBM=%%~na
start /wait ffmpeg.exe -i "%FILEWEBM%.webm" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEWEBM%-NEW.mp4"
For %%a IN ("*.mkv") DO Set FILEMKV=%%~na
start /wait ffmpeg.exe -i "%FILEMKV%.mkv" -i "%FILEWAV%.wav" -c:v copy -map 0:v:0 -map 1:a:0 "%FILEMKV%-NEW.mp4"
exit
【问题讨论】:
标签: batch-file audio video ffmpeg wav