与ffmpeg合并多个视频和音频

时间:2018-07-13 19:55:16

标签: batch-file ffmpeg video-processing

我已经使用程序 youtube-dl 下载了YouTube播放列表,我选择了单独下载视频和音频,我现在有一个充满视频的文件夹,其中包含我希望的相应音频与ffmpeg合并在一起。

我需要使用批处理脚本来执行此操作,但是问题是youtube-dl在原始文件的标题后添加了偶然的字母,因此视频与相应的音频名称不同,文件名看起来像这样:< / p>

First title in the playlist 5J34JG.mp4
First title in the playlist H3826D.webm
Second title in the playlist 3748JD.mp4
Second title in the playlist 6SHJFZ.webm

如何使用Windows批处理脚本和ffmpeg合并这些多个视频/音频文件?

编辑:我忘了提到.webm文件是音频文件,并且我有多个文件,无法一一重命名。

2 个答案:

答案 0 :(得分:0)

@echo off
setlocal

set "outdir=muxed"
if not exist "%outdir%" md "%outdir%" || exit /b 1

:: Get each mp4 file and call the label to mux with webm file.
for %%A in (*.mp4) do call :mux "%%~A"
exit /b

:mux
setlocal
set "videofile=%~1"
set "name=%~n1"

:: Last token of the name is the pattern to remove.
for %%A in (%name:-=- %) do set "pattern=-%%~A"

:: Remove the pattern from the name.
call set "name=%%name:%pattern%=%%"

:: Get the webm filename.
for %%A in ("%name%-*.webm") do set "audiofile=%%~A"

:: Mux if webm file exist and output file does not exist.
if exist "%audiofile%" if not exist "%outdir%\%name%.mp4" (
    ffmpeg -i "%videofile%" -i "%audiofile%" -c copy "%outdir%\%name%.mkv"
)
exit /b

该脚本将首先使输出目录保存mp4 文件,以便输出不会成为输入。

for循环将获取每个mp4文件名。 :mux 标签以mp4文件名作为参数调用。

变量videofile存储mp4文件名和 变量name仅存储不带扩展名的名称。

name的最后一个标记将是 YTID 模式,而 for循环会将最后一个令牌设置为pattern

call set将用 名称。这将提供可以与通配符一起使用的名称 找到webm文件名。 for循环将获取webm 文件名。

如果目标确实存在而不是输出文件,则 ffmpeg会将这两个文件混合成一个输出文件。

输出文件容器格式为mkv。

答案 1 :(得分:0)

由于我需要做类似的事情,所以我发布了较短的代码来帮助其他人。

这是在子文件夹中

FOR /F "tokens=*" %%f IN ('dir /b /s F2M\*.mp4') DO ffmpeg -i "%%~dpnxf" -i "%%~dpnf.m4a" -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 "F2M\%%~nf-clean.mp4"

这是为了在同一目录中执行

for %%f in (*.mkv) do ffmpeg -i "%%~dpnxf" -i "%%~dpnf.m4a" -c:v copy -c:a copy -map 0:0 -map 0:1 -shortest "%%~nf-remux.mp4" 

这是ffmpeg不在同一文件夹中

set ffmpeg=C:\ffmpeg.exe
for %%a in (*.mkv) do "%ffmpeg%" -i "%%~dpnxf"  -i "%%~dpnf.m4a" -c:v copy -c:a copy  -map 0:0 -map 1:0 -shortest "%%~nf-remux.mp4"

只是示例代码,未专门为OP设置格式。谨慎使用。