avformat-直接复制视频并将音频转码为aac

时间:2020-04-18 10:00:01

标签: ffmpeg aac libavformat transcode

我有一个带有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不会。

0 个答案:

没有答案