如何使用ffmpeg将新音频(不混音)添加到视频中?

Vet*_*lll 123 audio video ffmpeg

我使用了如下命令:

ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio
Run Code Online (Sandbox Code Playgroud)

在最新版本中添加新的音频轨道到视频(不混合).

但我将ffmpeg更新为最新版本(ffmpeg版本git-2012-06-16-809d71d),现在在此版本中该参数-newaudio不起作用.

请告诉我如何使用我的视频(而不是混音)添加新音频ffmpeg.

llo*_*gan 261

将音频添加到视频:流复制

ffmpeg -i video.avi -i audio.mp3 -codec copy -shortest output.avi
Run Code Online (Sandbox Code Playgroud)
  • 省略该-map选项将使用默认流选择.如果您的视频输入没有音频,这将有效.
  • 此示例使用-codec copy流拷贝(再编码没有;质量被保留,这是快).
  • -shortest选项将output.avi与最短输入的持续时间相同.

将音频添加到视频:重新编码

如果输出不喜欢原始格式,或者如果要更改格式,可以指定编码器:

ffmpeg -i video.avi -i audio.mp3 -c:v libx264 -c:a libvorbis -shortest output.mkv
Run Code Online (Sandbox Code Playgroud)

手动选择特定流

有时,默认流选择不会为您提供所需的结果.在这个例子中video.mp4有视频音频,audio.m4a只有音频.用于-map从以下选项中选择视频video.mp4和音频audio.m4a:

ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a -c copy -shortest output.mp4
Run Code Online (Sandbox Code Playgroud)
  • -map 0:v- 从输入0(第一个输入,即video.mp4)选择video流.
  • -map 1:a- 从输入1(第二个输入,即audio.m4a)选择audio流.

将两个音频输入混合/组合成一个

从中获取视频video.webm,并使用amerge过滤器组合来自video.webm和的音频audio.oga:

ffmpeg -i video.webm -i audio.oga -filter_complex \
"[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a libvorbis -ac 2 -shortest out.webm
Run Code Online (Sandbox Code Playgroud)

生成无声音频

您可以使用anullsrc过滤器来创建静音音频流.过滤器允许您选择所需的通道布局(单声道,立体声,5.1等)和采样率.

ffmpeg -i video.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-c:v copy -shortest output.mp4
Run Code Online (Sandbox Code Playgroud)

另见

  • 这对我来说起初不起作用,但使用`-map 0:0 -map 1:0`而不是`-map 0 -map 1`为我做了诀窍.谢谢! (5认同)

小智 24

给wav的mp3音乐

ffmpeg -i music.mp3 music.wav
Run Code Online (Sandbox Code Playgroud)

截断以适应视频

ffmpeg -i music.wav -ss 0 -t 37 musicshort.wav
Run Code Online (Sandbox Code Playgroud)

混合音乐和视频

ffmpeg -i musicshort.wav -i movie.avi final_video.avi
Run Code Online (Sandbox Code Playgroud)

  • 我记得,最后一个变种将用新的替换旧的音频. (3认同)
  • +1`在视频中添加新音频(不混合),这就是答案。 (2认同)

use*_*149 18

如果输入视频有多个音轨而您需要再添加一个音轨,请使用以下命令:

ffmpeg -i input_video_with_audio.avi -i new_audio.ac3 -map 0 -map 1 -codec copy output_video.avi
Run Code Online (Sandbox Code Playgroud)

-map 0表示从第一个输入文件(input_video_with_audio.avi)复制(包括)所有流,并-map 1表示从第二个输入文件(new_audio.ac3)中包括所有流(在本例中为一个).


小智 5

这些解决方案都不适合我。我的原始音频被覆盖,或者我在更复杂的“amerge”示例中收到“无法映射内存”之类的错误。看来我需要 -filter_complex 混合。

ffmpeg -i videowithaudioyouwanttokeep.mp4 -i audiotooverlay.mp3 -vcodec copy -filter_complex amix -map 0:v -map 0:a -map 1:a -shortest -b:a 144k out.mkv
Run Code Online (Sandbox Code Playgroud)


小智 5

没有什么对我有用(我认为这是因为我输入的 .mp4 视频没有任何音频)所以我发现这对我有用:

ffmpeg -i input_video.mp4 -i balipraiavid.wav -map 0:v:0 -map 1:a:0 output.mp4