此视频未与音频混合,因为音频流的格式不同

此视频未与音频混合,因为音频流的格式不同

当我想下载一些视频时,我时不时会遇到以下问题:

此视频未与音频混合,因为音频流的格式不同

在此处输入图片描述

我想知道如何解决此问题(如果可能),如果不能,如何合并两个独立文件的输出:

TS file ---> video 
AAC file --> Audio

我使用 VLC 程序,但它花费了很多时间,因为我必须经过很多步骤才能合并一个项目,而且我有太多分离的文件!


如果我有这样的目录层次结构:

Parent
    |
   Folder1 -->Sub1 --->1.ts
                   --->1_audio.aac

           -->Sub2 --->2.ts
                   --->2_audio.aac
 
   Folder2 -->Sub1 --->1.ts
                   --->1_audio.aac

如何将其转换为

  Parent
    |
   Folder1 -->Sub1 --->1.mp4

           -->Sub2 --->2.mp4
                   
 
   Folder2 -->Sub1 --->1.mp4
                   
          

答案1

VLC 可以通过命令行自动运行。一旦制定了命令行,就可以将其嵌入到脚本中。

命令参数有点复杂,但有一个简单的方法可以让 VLC 为您创建它。

其想法是手动合并一组文件,然后从详细输出中创建命令行。

这在帖子中有描述 如何从命令行在 VLC 中进行以下转换?,尤其是在 亚历山大·希金斯 (Alexander Higgins) 的回答

该命令的简化格式为:

vlc input --sout="[TRANSCODECOMMAND"]

在 VLC 菜单设置后进行合并工具 > 信息Verbosity2将给出如下行:

qt debug: Transcode MRL: sout=#transcode{vcodec=none,acodec=s16l,ab=160,channels=2,samplerate=44100,scodec=none}:std{access=file{no-overwrite},mux=wav,dst='C:/Users/alexh/source/repos/WaveEditor/WaveEditor/bin/Debug/samples/_AI_NylStr_MonRibb_Sft-A2-0.wav'}

复制以开头的所有内容#transcode将产生以下命令:

"C:\Program Files\VideoLAN\VLC\vlc.exe" _AI_NylStr_MonRibb_Sft-G2-0.mp3 --sout="#transcode{vcodec=none,acodec=s16l,ab=160,channels=2,samplerate=44100,scodec=none}:std{access=file,mux=wav,dst=_AI_NylStr_MonRibb_Sft-G2-0-44100k.wav}" vlc://quit

另一个非常容易使用的有用程序是 MP4盒, 哪个行 点击此处下载

要将音频添加到视频,您可以执行以下操作:

"C:\Program Files\GPAC\mp4box.exe" -add 1.aac 1.ts

这将进行就地替换1.ts,因此将破坏原始文件。

制作一个.mp4视频需要两行:

"C:\Program Files\GPAC\mp4box.exe" -add 1.ts -new 1.mp4
"C:\Program Files\GPAC\mp4box.exe" -add 1.aac 1.mp4

这是一个批处理脚本,它进入所有子文件夹并.mp4.ts.aac文件创建文件。目标.mp4文件将与视频文件同名。

.ts为了安全起见,不会删除和文件.aac。如果一切正常,可以稍后删除它们。我建议备份父文件夹,以防万一。

这是.bat文件。它应该放在父文件夹中。

@echo off
setlocal EnableDelayedExpansion
for /d %%D in ("*") DO (
  echo ** Entering folder : %%D
  cd "%%D"
  for %%F in (*.ts) do set "VIDEO=%%F"
  for %%G in (*.aac) do set "AUDIO=%%G"
  set "TARGET=!VIDEO:.ts=!"
  echo ** Found: Video=!VIDEO!  Audio=!AUDIO!  Target=!TARGET!
  "C:\Program Files\GPAC\mp4box.exe" -add "!VIDEO!" -new "!TARGET!.mp4"
  "C:\Program Files\GPAC\mp4box.exe" -add "!AUDIO!" "!TARGET!.mp4"
  cd ..
)

对于向下两级,使用两个 致/D 命令:

@echo off
setlocal EnableDelayedExpansion
for /d %%D in ("*") DO (
echo ** Entering folder : %%D
cd "%%D"
for /d %%E in ("*") DO (
  echo ** Entering sub-folder : %%E
  cd "%%E"
  for %%F in (*.ts) do set "VIDEO=%%F"
  for %%G in (*.aac) do set "AUDIO=%%G"
  set "TARGET=!VIDEO:.ts=!"
  echo ** Found: Video=!VIDEO!  Audio=!AUDIO!  Target=!TARGET!
  "C:\Program Files\GPAC\mp4box.exe" -add "!VIDEO!" -new "!TARGET!.mp4"
  "C:\Program Files\GPAC\mp4box.exe" -add "!AUDIO!" "!TARGET!.mp4"
  del "!VIDEO!"
  del "!AUDIO!"
  cd ..
)
cd ..
)

答案2

使用 ffmpeg 快速合并文件可能比同时在 VLC 中加载两个文件更容易。

如果你愿意,你可以使用 powershell 或 cmd 之类的命令行并写入

ffmpeg -i video.ts -i audio.aac -c:v copy -c:a copy output.mp4

如果你没有安装 ffmpeg,官方有预编译的二进制文件ffmpeg 网站


更深入的解释:ffmpeg 本身是一个命令行工具。它有如此多的功能,以至于使用 GUI 不可避免地会非常复杂,令人沮丧,因为它会很复杂。有编译版本的带有 GUI 的 ffmpeg但我不建议使用它们,因为它们总是为特定目的而制作,永远不会完全符合你的目的。相反,我会使用命令行版本吉安上面的官方网站确实有链接。只需将其放在 PATH 变量中包含的文件夹中或直接从文件夹中执行即可。使用上面的命令,将其替换video.ts为视频文件的路径、audio.aac音频文件的路径以及output.mp4将生成的新文件的路径。将其视为通常的“另存为...”选项。我希望这能让您更清楚。

相关内容