我有一个带有mov
容器的视频文件,其中包含一个h264
视频和一个alaw
音频流。
我想通过MSE在浏览器中播放它,但是它不支持alaw
,因此重新混音是不够的,音频流必须转码为aac
。
这是我的意图,所以我从transcode_aac示例here开始。
我可以将我的视频文件转码(仅转换为aac音频),但是如果我也想将视频流复制到输出中,则会出现错误,并且不确定如何继续。
如果我禁止编写视频,以下是转码日志(逐包):
audioin : pts: 0 pts_time: 0 dts: 0 dts_time: 0 duration:1024 duration_time: 0.128 stream_index:1
audioin : pts: 1024 pts_time: 0.128 dts: 1024 dts_time: 0.128 duration: 896 duration_time: 0.112 stream_index:1
videoin : pts: 21600 pts_time: 0.24 dts: 21600 dts_time: 0.24 duration: 1 duration_time:1.11111e-05 stream_index:0
audioin : pts: 1920 pts_time: 0.24 dts: 1920 dts_time: 0.24 duration: 160 duration_time: 0.02 stream_index:1
audioout: pts: -1024 pts_time: -0.128 dts: -1024 dts_time: -0.128 duration:1024 duration_time: 0.128 stream_index:1
videoin : pts: 21601 pts_time:0.240011 dts: 21601 dts_time:0.240011 duration: 1 duration_time:1.11111e-05 stream_index:0
videoin : pts: 21602 pts_time:0.240022 dts: 21602 dts_time:0.240022 duration: 1 duration_time:1.11111e-05 stream_index:0
videoin : pts: 21603 pts_time:0.240033 dts: 21603 dts_time:0.240033 duration: 1 duration_time:1.11111e-05 stream_index:0
videoin : pts: 21604 pts_time:0.240044 dts: 21604 dts_time:0.240044 duration: 1 duration_time:1.11111e-05 stream_index:0
videoin : pts: 21605 pts_time:0.240056 dts: 21605 dts_time:0.240056 duration: 1 duration_time:1.11111e-05 stream_index:0
videoin : pts: 21606 pts_time:0.240067 dts: 21606 dts_time:0.240067 duration:3594 duration_time: 0.0399333 stream_index:0
audioin : pts: 2080 pts_time: 0.26 dts: 2080 dts_time: 0.26 duration: 160 duration_time: 0.02 stream_index:1
videoin : pts: 25200 pts_time: 0.28 dts: 25200 dts_time: 0.28 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 2240 pts_time: 0.28 dts: 2240 dts_time: 0.28 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 28800 pts_time: 0.32 dts: 28800 dts_time: 0.32 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 2560 pts_time: 0.32 dts: 2560 dts_time: 0.32 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 32400 pts_time: 0.36 dts: 32400 dts_time: 0.36 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 2880 pts_time: 0.36 dts: 2880 dts_time: 0.36 duration: 320 duration_time: 0.04 stream_index:1
audioout: pts: 0 pts_time: 0 dts: 0 dts_time: 0 duration:1024 duration_time: 0.128 stream_index:1
videoin : pts: 36000 pts_time: 0.4 dts: 36000 dts_time: 0.4 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 3200 pts_time: 0.4 dts: 3200 dts_time: 0.4 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 39600 pts_time: 0.44 dts: 39600 dts_time: 0.44 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 3520 pts_time: 0.44 dts: 3520 dts_time: 0.44 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 43200 pts_time: 0.48 dts: 43200 dts_time: 0.48 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 3840 pts_time: 0.48 dts: 3840 dts_time: 0.48 duration: 320 duration_time: 0.04 stream_index:1
audioout: pts: 1024 pts_time: 0.128 dts: 1024 dts_time: 0.128 duration:1024 duration_time: 0.128 stream_index:1
videoin : pts: 46800 pts_time: 0.52 dts: 46800 dts_time: 0.52 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 4160 pts_time: 0.52 dts: 4160 dts_time: 0.52 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 50400 pts_time: 0.56 dts: 50400 dts_time: 0.56 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 4480 pts_time: 0.56 dts: 4480 dts_time: 0.56 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 54000 pts_time: 0.6 dts: 54000 dts_time: 0.6 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 4800 pts_time: 0.6 dts: 4800 dts_time: 0.6 duration: 320 duration_time: 0.04 stream_index:1
audioout: pts: 2048 pts_time: 0.256 dts: 2048 dts_time: 0.256 duration:1024 duration_time: 0.128 stream_index:1
videoin : pts: 57600 pts_time: 0.64 dts: 57600 dts_time: 0.64 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 5120 pts_time: 0.64 dts: 5120 dts_time: 0.64 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 61200 pts_time: 0.68 dts: 61200 dts_time: 0.68 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 5440 pts_time: 0.68 dts: 5440 dts_time: 0.68 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 64800 pts_time: 0.72 dts: 64800 dts_time: 0.72 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 5760 pts_time: 0.72 dts: 5760 dts_time: 0.72 duration: 320 duration_time: 0.04 stream_index:1
videoin : pts: 68400 pts_time: 0.76 dts: 68400 dts_time: 0.76 duration:3600 duration_time: 0.04 stream_index:0
audioin : pts: 6080 pts_time: 0.76 dts: 6080 dts_time: 0.76 duration: 320 duration_time: 0.04 stream_index:1
audioout: pts: 3072 pts_time: 0.384 dts: 3072 dts_time: 0.384 duration:1024 duration_time: 0.128 stream_index:1
但是,如果我启用了视频编写功能,则该过程将结束,因为它违反了一些内部规则(断言):
audioin : pts: 0 pts_time: 0 dts: 0 dts_time: 0 duration:1024 duration_time: 0.128 stream_index:1
audioin : pts: 1024 pts_time: 0.128 dts: 1024 dts_time: 0.128 duration: 896 duration_time: 0.112 stream_index:1
videoin : pts: 21600 pts_time: 0.24 dts: 21600 dts_time: 0.24 duration: 1 duration_time:1.11111e-05 stream_index:0
videoout: pts: 21600 pts_time: 0.24 dts: 21600 dts_time: 0.24 duration: 1 duration_time:1.11111e-05 stream_index:0
audioin : pts: 1920 pts_time: 0.24 dts: 1920 dts_time: 0.24 duration: 160 duration_time: 0.02 stream_index:1
audioout: pts: -1024 pts_time: -0.128 dts: -1024 dts_time: -0.128 duration:1024 duration_time: 0.128 stream_index:1
videoin : pts: 21601 pts_time:0.240011 dts: 21601 dts_time:0.240011 duration: 1 duration_time:1.11111e-05 stream_index:0
videoout: pts: 21601 pts_time:0.240011 dts: 21601 dts_time:0.240011 duration: 1 duration_time:1.11111e-05 stream_index:0
[mp4 @ 0x5562e89b5b80] Packets poorly interleaved, failed to avoid negative timestamp -2944 in stream 1.
Try -max_interleave_delta 0 as a possible workaround.
Assertion next_dts >= 0 failed at libavformat/movenc.c:1025
我读到了负的pts值:
编码器有延迟时会产生负的时间戳。 否则,由于音频延迟,它们将导致A / V不同步。
在此线程中:https://lists.ffmpeg.org/pipermail/libav-user/2015-October/008548.html
所以aac编码器给我的PTS值是负的,但是此过程失败了。
我该如何解决?
输出容器是mp4,这很重要。其他容器可能会容忍负面的next_dts,但mp4不会。