我是一名 ffmpeg 新手,正在尝试将 h.264 视频与辅助 .wav 评论音轨进行混音,而无需在视频端重新编码任何内容。视频的音频为 .aac 格式。
我使用 Bandicam 来录制镜头;有一个设置可以同时录制单独的 .wav 文件(评论)。
当我最初试图弄清楚这一点时,我打开了一个帖子(链接在底部),并对回复的用户的帮助感到非常兴奋。答案似乎完全满足了我的疑问。然而,现在我有一个新问题,因此我想公开询问。
当我尝试将评论重新合并到视频上时,一些录音会返回我在标题中提到的错误。错误是“在找到 END 元素之前输入缓冲区已耗尽”。文件完成合并,但如果错误发生的次数足够多,视频中就会出现明显的视频/音频不同步。我将我的 FFMPEG 可执行文件更新为最新版本,之前有帮助的人指出我可能有“格式错误的音频流”。
但同样,(1) 不是全部,只有部分,并且 (2) 当我将 .mp4 加载到 Movie Studio 中时,两个音频流(原始录音音频和评论)听起来都很完美。所以我想说 ffmpeg/avanti 是罪魁祸首。
无论如何,我不知道解决方案是什么。如果您有任何想法,请提供帮助。
答案1
AAC 音频由帧组成。每个帧包含各种类型的元素。每个帧中的最后一个元素是 END 元素。您收到的错误消息表明 FFmpeg 已调查该帧但未找到 END 元素。因此,它会在 remux 期间跳过该帧,如果出现太多这样的情况,最终会破坏同步。因此,这里有一些解决这个问题的尝试。
#1保留原始时间戳
ffmpeg -copyts -i video.mp4 -i audio.wav -map 0 -map 1:a -c:v copy -c:a:0 copy -c:a:1 aac video-new.mp4
#2忽略流错误并保留原始时间戳
ffmpeg -copyts -err_detect ignore_err -i video.mp4 -i audio.wav -map 0 -map 1:a -c:v copy -c:a:0 copy -c:a:1 aac video-new.mp4
#3对视频的音频进行编码,但保留由于损坏的帧而产生的间隙
ffmpeg -i video.mp4 -i audio.wav -filter_complex "[0:a]aresample=async=1:min_comp=0.02[a]" -map 0:v -map "[a]" -map 1:a -c:v copy -c:a:0 aac -c:a:1 aac video-new.mp4
答案2
我已经使用上述命令对视频的音频进行编码,但保留了由于损坏的帧而产生的间隙,但我仍然在 ffmpeg 命令行上看到错误。这大大减少了 hls 播放器上出现的音频抖动。
友善的建议