我想将音频文件(.wav 或 .au 格式)与视频文件(.mp4 格式)合并。
请告诉我如何实现这一点。我想将这些文件合并到新的 .mp4 视频文件中。非常欢迎使用 ffmpeg 命令。
答案1
合并视频和音频,并重新编码音频
参见此示例,取自这篇博文但已针对较新的语法进行了更新。其效果应为:
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac output.mp4
在这里,我们假设视频文件还不包含任何音频流,并且您希望具有与输入格式相同的输出格式(此处为 MP4)。
上述命令对音频进行转码,因为 MP4 无法承载 PCM 音频流。您可以根据需要使用任何其他所需的音频编解码器。请参阅FFmpeg Wiki:AAC 编码指南了解更多信息。
如果您的音频或视频流较长,您可以添加该-shortest
选项,以便 ffmpeg 在一个文件结束后停止编码。
无需重新编码即可复制音频
如果您的输出容器可以处理(几乎)任何编解码器(例如 MKV),那么您可以简单地复制音频和视频流:
ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv
替换音频流
如果您的输入视频已包含音频,并且您想要替换它,则需要告诉 ffmpeg 采用哪个音频流:
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
这-map
选项使得 ffmpeg 仅使用来自第一个输入的第一个视频流和来自第二个输入的第一个音频流作为输出文件。
答案2
由于我不被允许以我的声誉对第一个答案发表评论,所以在这里补充一下,因为我在编码 webms 时遇到了这个问题。
例如,如果你的音频流比视频流长,您必须剪切它,否则您将得到最后一个视频帧作为静止图像和正在运行的音频。
要剪切任一流,您可以在每个 -i“file.ext”之前使用 -ss [hh:mm:ss] -t [ss]。-
ss [...] 将定义要剪切的起点
-t [...] 将定义段的长度(以秒为单位
)示例:
ffmpeg.exe -ss 00:00:10 -t 5 -i "video.mp4" -ss 0:00:01 -t 5 -i "music.m4a" -map 0:v:0 -map 1:a:0 -y "out.mp4"
例如shortest
:
ffmpeg -i "video.mp4" -i "music.m4a" -c:v copy -map 0:v:0 -map 1:a:0 -shortest "out.mp4"
答案3
打开命令提示符(windows+ R-> Cmd+ Enter)。然后转到有音频和视频文件的文件夹内部。应用此命令:
ffmpeg -i "videoFile.mp4" -i "audioFile.mp3" -shortest outPutFile.mp4
您将获得一个名为outPutFile.mp4
(音频和视频合并文件)的新文件
答案4
尝试使用 mencoder(是的,它基于 ffmpeg,但你永远不知道)。我使用参数-audiofile
。不过,我通常使用 ffmpeg,所以请谨慎对待这个建议。
而且,如果您使用 Windows,Mediacoder(遗憾的是不再是开源的)可以工作...它基本上是许多 gnu 编码器和一些非免费编码器的前端。