У меня есть видеофайл с контейнером mov
, который содержит одно h264
видео и один alaw
аудиопоток.
Я хотел бы воспроизвести его в браузере через MSE, но он не поддерживает alaw
, поэтому ремуксинга недостаточно, аудиопоток должен быть перекодирован в aac
.
Это мое намерение, поэтому я начал с transcode_aa c sample here .
Я могу транскодировать мой видеофайл (только для c audio), но если я также хочу скопировать видеопоток на выход, я получил ошибку, и я не уверен, что делать дальше.
Вот журнал транскодирования (пакет за пакетом), если я отключаю написание видео:
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
Я читал об отрицательных очках значения:
Кодеры будут выдавать отрицательные метки времени, когда они имеют задержку. В противном случае они вызовут A / V desyn c, так как аудио задерживается.
Из этой темы: https://lists.ffmpeg.org/pipermail/libav-user/2015-October/008548.html
Так что аа * Кодер 1041 * дает мне отрицательный PTS, но затем процесс завершается неудачей.
Как мне решить эту проблему?
Выходной контейнер - mp4, это важно. Другие контейнеры могут допускать отрицательное значение next_dts, но mp4 - нет.