当前位置: 首页 > 知识库问答 >
问题:

使用ffmpeg合并多个视频和音频

胥英奕
2023-03-14

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

我需要使用批处理脚本来执行此操作,但问题是youtube-dl在原始文件的标题之后添加了临时字母,因此视频与其对应的音频没有相同的名称,文件名如下所示:

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个答案

尹兴生
2023-03-14

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

这是子文件夹中的

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格式化。小心使用。

梁丘招
2023-03-14
@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文件,以便输出不会成为输入。

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

变量videofile存储mp4文件名,变量name只存储名称,不带扩展名。

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

调用集将用名称中的“”替换模式。这将提供一个可以与通配符一起使用的名称,以查找webm文件名。for循环将获得webm文件名。

如果目标确实存在,而不是输出文件,那么ffmpeg将把这两个文件多路复用到一个输出文件中。

输出文件容器格式为mkv。

 类似资料:
  • 我有一个长音频部分和一个短视频部分,我想在一起mux。 我正在尝试使用以下命令进行MUX: video_0-0002.h264-整个文件(2秒长) Audio.wav-从4秒到6秒 但音频被搞砸了...我怎样才能正确地做呢? 也试过了,听起来好像最后还是有寂静。

  • 我想合并两个视频。两者都有相同的决心。第二个视频没有任何音频 ffmpeg-itest.mp4-ipicture.mp4-filter_complex"[0: v][0: a][1: v][1: a]conat=n=1: v=2: a=1[v][a]"-map"[vv]"-map"[aa]"mergedVideo.mp4 这是我正在使用的命令,但我得到了以下错误流说明符:filtergraph d

  • 我编写了代码将几个音频文件与1个图像组合成WebM视频。(audio1与默认jpg结合,audio2与默认jpg结合等)。 问题是,在此之后,视频长度比音频长度长25秒(因此音频在视频结束前缩短25秒)。 有没有办法在音频的同时停止视频?这是我使用的代码(我启动一个BAT命令文件)

  • 我有一个视频,其中有多个音频。有一些对话和一些不同的配乐。但是,当我使用ffmpeg-i 1时。mp4仅显示2个流。 Stream#0:0(und): Video: h264(High)(avc1/0x31637661), yuv420p(tv, bt709),1920x1080[SAR 1:1 DAR 16:9],2964 kb/s,24 fps,24 tbr,90ktbn,48 tbc(默认)

  • 本文向大家介绍java使用FFmpeg合成视频和音频并获取视频中的音频等操作(实例代码详解),包括了java使用FFmpeg合成视频和音频并获取视频中的音频等操作(实例代码详解)的使用技巧和注意事项,需要的朋友参考一下 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 ffmpeg命令参数如下: 通用选项 -L license -h 帮助 -fromats 显