(Windows 10 64)我已经看到并阅读了针对此问题形式的多个(50+)答案,但与我想要做的无关。
我有一个文件夹,里面有 30 多个短片(每个几秒钟)mp4,我还有一个文件夹,里面有 8 个或说是音轨 mp3,音轨需要在视频结束时结束(因此,如果音频文件比视频长,则不要有 4 分钟的黑屏视频)
我正在尝试将所有文件复用在一起(我知道很多文件 D: 但这就是我不想手动执行此操作的原因)目前我正在一次执行一个文件,如下所示:
ffmpeg -i videoFile.mp4 -stream_loop -1 -i audioFile.mp3 -filter_complex "amix=inputs=2:duration=shortest" -c:v copy -movflags +faststart output.mp4
我见过一个 bash 可以做到这一点,但只有当音频和视频具有相同的名称时,所以它实际上不是多路复用 :(
目标是不损失视频质量,将每个视频合并到一个文件夹中,将每个文件也合并到一个单独的文件夹中,然后将它们输出(我猜是合并视频和音频名称?)到一个单独的文件夹。
我看到了旧的 bat 文件,但没有将所有音频与所有视频合并,它是:
@echo off
:: set paths (no quotes)
set ffmpeg=C:\ffmpeg\bin\ffmpeg.exe
set outfolder=E:\Template\Video Outro\FFBatch
@echo.
@echo on
for %%f in (*.mp4) do "%ffmpeg%" -y ^
-hide_banner ^
-i "%%~dpnxf" -i "%%~dpnf.mp3" ^
-filter_complex "amix=inputs=2:duration=shortest" ^
-c:v copy -movflags ^
-map 0:0 -map 1:0 -shortest ^
"%outfolder%\%%~nf-remux.mp4"
@echo off
if errorlevel 1 pause
@echo.
答案1
好的,最后我想起了我试图在这里做的编程参数/逻辑叫什么 NESTED 所以我在谷歌上搜索了嵌套批处理参数并对其进行了测试(它正在工作)
我确实必须自己更改复杂的部分,因为我的视频上没有任何音轨(故意的),但现在这对我来说效果很好:)
@echo off
:: set paths (no quotes)
set ffmpeg=C:\Windows\ffmpeg\bin\ffmpeg.exe
set outfolder=E:\Template\Video Outro\FFBatch
@echo.
@echo on
for %%f in (*.mp4) do (
for %%a in (*.mp3) do "%ffmpeg%" -y ^
-i "%%~dpnxf" -stream_loop -1 -i "%%~dpna.mp3" ^
-c:v copy -shortest -map 0:v -map 1:a^
"%outfolder%\%%~nf-%%~na-remux.mp4")
@echo off
if errorlevel 1 pause
@echo.