FFmpeg/DASH: длительность или временная метка вне диапазона для формата mov/mp4
Я пытаюсь преобразовать aac
поток, чтобы разбить. Проблема в том, что я получаю много ошибок, как показано ниже (хотя кажется, что я делю его на несколько файлов, но я получаю ошибки и на плеере). Вопрос в том, почему я получаю эти ошибки и как я могу это исправить? Если я просто конвертирую "copy" в один файл mp4, он работает без ошибок.
ffmpeg -i "a.mkv" -y -map 0:1 -c:0 copy -min_seg_duration 1000000
-use_timeline 1 -use_template 1 -init_seg_name init.mp4s
-media_seg_name "\$Number\$.mp4s" -adaptation_sets "id=1,streams=0"
-remove_at_exit 0 -f dash -dash 1
"out/stream.mpd" -loglevel error
Выход
[mp4 @ 0x7fbb70819600] Application provided duration: -32 / timestamp: 40475608 is out of range for mov/mp4 format
[mp4 @ 0x7fbb70819600] Application provided duration: -32 / timestamp: 40764376 is out of range for mov/mp4 format
[mp4 @ 0x7fbb70819600] Application provided duration: -32 / timestamp: 40860664 is out of range for mov/mp4 format
[mp4 @ 0x7fbb70819600] Application provided duration: -32 / timestamp: 41149432 is out of range for mov/mp4 format
[mp4 @ 0x7fbb70819600] Application provided duration: -32 / timestamp: 41390056 is out of range for mov/mp4 format
[mp4 @ 0x7fbb70819600] Application provided duration: -32 / timestamp: 41823208 is out of range for mov/mp4 format
Копирование в один MP4 прекрасно работает ffmpeg -i "a.mkv" -y -map 0:1 -c:0 copy -f mp4 -dash 1 "out/out.mp4" -loglevel error
зонд
ffprobe a.mkv
ffprobe version 3.4 Copyright (c) 2007-2017 the FFmpeg developers
built with Apple LLVM version 9.0.0 (clang-900.0.37)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Input #0, matroska,webm, from 'a.mkv':
Metadata:
encoder : libebml v1.3.1 + libmatroska v1.4.2
creation_time : 2017-03-11T02:56:50.000000Z
Duration: 02:12:52.39, start: 0.000000, bitrate: 740 kb/s
Chapter #0:0: start 0.000000, end 520.270000
Metadata:
title : 00:00:00.000
Chapter #0:1: start 520.270000, end 1135.718000
Metadata:
title : 00:08:40.270
Chapter #0:2: start 1135.718000, end 1703.660000
Metadata:
title : 00:18:55.718
Chapter #0:3: start 1703.660000, end 2314.187000
Metadata:
title : 00:28:23.660
Chapter #0:4: start 2314.187000, end 2888.594000
Metadata:
title : 00:38:34.187
Chapter #0:5: start 2888.594000, end 3499.246000
Metadata:
title : 00:48:08.594
Chapter #0:6: start 3499.246000, end 4154.692000
Metadata:
title : 00:58:19.246
Chapter #0:7: start 4154.692000, end 4646.392000
Metadata:
title : 01:09:14.692
Chapter #0:8: start 4646.392000, end 5373.660000
Metadata:
title : 01:17:26.392
Chapter #0:9: start 5373.660000, end 5882.085000
Metadata:
title : 01:29:33.660
Chapter #0:10: start 5882.085000, end 6627.871000
Metadata:
title : 01:38:02.085
Chapter #0:11: start 6627.871000, end 7144.471000
Metadata:
title : 01:50:27.871
Chapter #0:12: start 7144.471000, end 7451.944000
Metadata:
title : 01:59:04.471
Chapter #0:13: start 7451.944000, end 7972.394000
Metadata:
title : 02:04:11.944
Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709/unknown/unknown, progressive), 720x300 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Metadata:
title : X264
BPS : 623765
BPS-eng : 623765
DURATION : 02:12:52.311000000
DURATION-eng : 02:12:52.311000000
NUMBER_OF_FRAMES: 191144
NUMBER_OF_FRAMES-eng: 191144
NUMBER_OF_BYTES : 621606403
NUMBER_OF_BYTES-eng: 621606403
_STATISTICS_WRITING_APP: mkvmerge v8.3.0 ('Over the Horizon') 64bit
_STATISTICS_WRITING_APP-eng: mkvmerge v8.3.0 ('Over the Horizon') 64bit
_STATISTICS_WRITING_DATE_UTC: 2017-03-11 02:56:50
_STATISTICS_WRITING_DATE_UTC-eng: 2017-03-11 02:56:50
_STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
_STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
Metadata:
BPS : 114797
BPS-eng : 114797
DURATION : 02:12:52.394000000
DURATION-eng : 02:12:52.394000000
NUMBER_OF_FRAMES: 373706
NUMBER_OF_FRAMES-eng: 373706
NUMBER_OF_BYTES : 114401387
NUMBER_OF_BYTES-eng: 114401387
_STATISTICS_WRITING_APP: mkvmerge v8.3.0 ('Over the Horizon') 64bit
_STATISTICS_WRITING_APP-eng: mkvmerge v8.3.0 ('Over the Horizon') 64bit
_STATISTICS_WRITING_DATE_UTC: 2017-03-11 02:56:50
_STATISTICS_WRITING_DATE_UTC-eng: 2017-03-11 02:56:50
_STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
_STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
Шака отладка
Assertion failed: This should be an update of the last segment in a period
shaka.media.SegmentIndex.merge @ segment_index.js:153
shaka.dash.SegmentTemplate.createStream @ segment_template.js:82
shaka.dash.DashParser.parseRepresentation_ @ dash_parser.js:1080
shaka.dash.DashParser.parseAdaptationSet_ @ dash_parser.js:978
shaka.dash.DashParser.parsePeriod_ @ dash_parser.js:722
shaka.dash.DashParser.parsePeriods_ @ dash_parser.js:626
shaka.dash.DashParser.processManifest_ @ dash_parser.js:520
(anonymous) @ dash_parser.js:431
Promise resolved (async)
shaka.dash.DashParser.parseManifest_ @ dash_parser.js:430
(anonymous) @ dash_parser.js:397
Promise resolved (async)
shaka.dash.DashParser.requestManifest_ @ dash_parser.js:390
shaka.dash.DashParser.onUpdate_ @ dash_parser.js:1161
setTimeout (async)
shaka.dash.DashParser.setUpdateTimer_ @ dash_parser.js:1209
(anonymous) @ dash_parser.js:331
Promise resolved (async)
shaka.dash.DashParser.start @ dash_parser.js:329
(anonymous) @ player.js:555
Promise resolved (async)
shaka.util.CancelableChain.then @ cancelable_chain.js:72
shaka.Player.load @ player.js:499
initPlayer @ ?x=149&y=88&q=http%3A%2F%2Flocalhost%3A8080%2Fmeta%2F%3FbucketID%3D%2FVolumes%2FTV%2FFa%26channelID%3D%2FVolumes%2FTV%26containerID%3D%2FUsers%2F%2Fbrev%%2FL1ZvbHVtZXMvVFYvRmFudGFzdGljLkJlYXN0cy5hbmQuV2hlcmUudG8uRmluZC5UaGVtLjIwMTYuQkRSaXAueDI2NC1TUEFSS1MvYS5ta3Y%2F97M4TS6IqnQ.mpd:392
463segment_index.js:145 Refusing to rewrite original references on update!
shaka.media.SegmentIndex.merge @ segment_index.js:145
shaka.dash.SegmentTemplate.createStream @ segment_template.js:82
shaka.dash.DashParser.parseRepresentation_ @ dash_parser.js:1080
shaka.dash.DashParser.parseAdaptationSet_ @ dash_parser.js:978
shaka.dash.DashParser.parsePeriod_ @ dash_parser.js:722
shaka.dash.DashParser.parsePeriods_ @ dash_parser.js:626
shaka.dash.DashParser.processManifest_ @ dash_parser.js:520
(anonymous) @ dash_parser.js:431
Promise resolved (async)
shaka.dash.DashParser.parseManifest_ @ dash_parser.js:430
(anonymous) @ dash_parser.js:397
Promise resolved (async)
shaka.dash.DashParser.requestManifest_ @ dash_parser.js:390
shaka.dash.DashParser.onUpdate_ @ dash_parser.js:1161
setTimeout (async)
shaka.dash.DashParser.setUpdateTimer_ @ dash_parser.js:1209
(anonymous) @ dash_parser.js:331
Promise resolved (async)
shaka.dash.DashParser.start @ dash_parser.js:329
(anonymous) @ player.js:555
Promise resolved (async)
shaka.util.CancelableChain.then @ cancelable_chain.js:72
shaka.Player.load @ player.js:499
initPlayer @ ?x=149&y=88&q=http%3A%2F%2Flocalhost%3A8080%2Fmeta%2F%3FbucketID%3D%2FVolumes%2FTV%2FFa%26channelID%3D%2FVolumes%2FTV%26containerID%3D%2FUsers%2F%2Fbrev%%2FL1ZvbHVtZXMvVFYvRmFudGFzdGljLkJlYXN0cy5hbmQuV2hlcmUudG8uRmluZC5UaGVtLjIwMTYuQkRSaXAueDI2NC1TUEFSS1MvYS5ta3Y%2F97M4TS6IqnQ.mpd:392
0 ответов
Капитан Шек указал мне на этот вопрос:)
Я не исследовал это подробно, но с первого взгляда могу предположить, что проблема с вашим ffmpeg
команда в том, что вы говорите ffmpeg
для создания мультимедийных сегментов тире с минимальной длиной сегмента в 1 секунду, но в то же время вы копируете закодированный битовый поток (который может не иметь точек произвольного доступа с указанной степенью детализации) Я больше люблю видео (здесь я предполагаю, что для аудио у вас также есть RAP и т. д.)
Вот что бы я сделал:
Вариант 1, если вам нужно только одно Представление:
ffmpeg -i a.mkv -map 0:1 -c:a aac -b:a 128k -use_timeline 1 -use_template 1 -remove_at_exit 0 -seg_duration 1 -f dash audio.mpd
Вариант 2, если вам нужно несколько битрейтов, вот пример с двумя представлениями:
ffmpeg -i a.mkv -map 0:1 -map 0:1 -c:a aac -b:a:0 128k -b:a:1 64k -use_timeline 1 -use_template 1 -remove_at_exit 0 -seg_duration 1 -adaptation_sets "id=0,streams=0,1" -f dash audio.mpd
Я быстро протестировал эти команды с помощью dash.js, используя контент с YouTube:
youtube-dl -f 137+140 https://www.youtube.com/watch\?v\=QPC4Kyx-AVw -o in.mp4
ffmpeg -i in.mp4 -c copy a.mkv
Который имеет h.264
видеопоток #0:0
и aac
аудиопоток #0:1