FFmpeg concat然后将声音结果添加到一个断断续续的音轨中

时间:2016-03-25 14:59:16

标签: ffmpeg synchronization concat

我正在尝试制作由图片和视频剪辑组成的视频。对于图像剪辑,我使用ffmpeg创建视频文件,然后通过以下两个步骤添加静音音频流:

ffmpeg.exe -loop 1 -i MyImage.png -codec:v libx264 -t 4.0 -profile:v high -preset slow -r 25 -b:v 500k -maxrate 500k -pix_fmt yuv420p -vf scale=1280:720 MyImageMovie.mp4

ffmpeg.exe -f lavfi -i anullsrc=r=48000 -i MyImageMovie.mp4 -shortest -c:v copy -c:a aac -strict experimental -y MyImageMovieWithSilentAudioStream.mp4

然后我将视频剪辑和图像剪辑与

组合在一起
ffmpeg.exe -f concat -i videoList.txt -c copy -y concatVideo.mp4

此时,视频看起来不错,任何有音频流的视频片段都与视频很好地同步。

现在我添加了一个音轨:

ffmpeg.exe -i concatVideo.mp4 -i soundtrack.mp3 -ar 48000 -filter_complex "[1:a]apad [b] ; [0:a][b]amerge=inputs=2[a]" -map 0:v -map "[a]" -c:v copy -ac 2 -shortest -y FinalVideo.mp4

问题是FinalVideo.mp4上的音轨在某些(不是全部)连接关节处断断续续。

我怀疑它与音频流和图像剪辑的视频流没有完全对齐有关。 aac的分辨率为.0231s,视频分辨率为0.04s。当我ffprobe MyImageMovieWithSilentAudioStream.mp4持续时间是4.00s但开始是0.0213。

如果我的连锁视频包含多个这些图像片段,则错误可能会开始累积。

如何保持视频和音频同步并添加不会断断续续的音轨?

此外,这有点有趣,我在Windows Media Player上播放最终视频时听不到口吃,但是如果我在VLC上播放或通过html本机视频元素播放它就会出现。< / p>

1 个答案:

答案 0 :(得分:0)

尝试在与concat相同的步骤中添加音轨。

ffmpeg -f concat -i videoList.txt -i soundtrack.mp3 \
-filter_complex "[1:a]apad[b];[0:a][b]amerge=inputs=2[a]" \
-map 0:v -map "[a]"
-c:v copy -c:a aac -ac 2 -ar 48000 -shortest -y FinalVideo.mp4

另外,您还可以组合图像和静默流生成,

ffmpeg -loop 1 -i MyImage.png -f lavfi -i anullsrc=r=48000 \
-vf scale=1280:720 \
-c:v libx264 -profile:v high -preset slow -r 25 -b:v 500k -maxrate 500k -pix_fmt yuv420p \
-c:a aac -strict experimental -t 4 -y MyImageMovieWithSilentAudioStream.mp4