当我想下载一些视频时,我时不时会遇到以下问题:
此视频未与音频混合,因为音频流的格式不同
我想知道如何解决此问题(如果可能),如果不能,如何合并两个独立文件的输出:
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 菜单设置后进行合并工具 > 信息到
Verbosity
,2
将给出如下行:
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
将生成的新文件的路径。将其视为通常的“另存为...”选项。我希望这能让您更清楚。