Существует ли видеоконтейнер, способный обрабатывать сегменты видео разного качества (или даже размера)?

Предположим, у меня есть видео продолжительностью 10 минут. И я хочу уменьшить его размер, сделав некоторые части с высоким битрейтом, в то время как другие менее важные части могут быть с низким битрейтом. Для этого я разрезал оригинал на сегменты. Оставив важные части как есть, перекодировав неважные части в более низкое качество.

введите описание изображения здесь

Итак, существует ли формат видеоконтейнера, который может «склеить» эти разные части вместе в один файл ? При хорошей поддержке в плеерах такой верный mplayer будет проигрывать видео как обычный файл? И стандартизированным / аннотированным / отменяемым способом, чтобы простая команда cli снова распутывала сегменты в отдельные части / файлы?

У меня сложилось впечатление, что Matroska сможет сделать это через главы, где каждый из моих сегментов будет одной главой. (Я где-то читал, что обсуждалось объединение видео без перекодирования). Но когда я читаю фактические документы mkv, кажется, что главы mkv больше похожи на текстовый индекс, указывающий на другой (видео) поток файла .mkv, а не на какой-то низкоуровневый индекс блока данных, который помог бы мне с моей идеей. Так что mkv выглядит как тупик.

Простое редактирование или слияние (которое возможно без потерь, с некоторым ремиксированием) не даст мне разного качества в разных частях видео - верно?

То, что я ищу, - это качество, адаптированное к интересующей области, что- то такое, что форматы изображений, такие как JPEG2000 , предлагают для пространственных областей, только здесь применяется к видео с течением времени.

Любые предложения или идеи?

Принятый ответ предлагает использовать возможности VBR такого формата, как mp4. Пока это работает, пожалуйста, оставьте ответ, если вы знаете другой способ достижения желаемого результата.

Ответы (3)

Если разница только в битрейте, то любой контейнер, который принимает потоки с переменным битрейтом, будет соответствовать вашим требованиям, например, MP4, MKV и т. д.

Шаг 1 — кодировать ваши сегменты, в идеале с использованием одного и того же кодировщика, с разными битрейтами, при этом все остальные параметры должны быть одинаковыми, например, через ffmpeg ,

ffmpeg -ss 0 -t 5 -i input.mp4 -b:v 1000k seg1.mp4

ffmpeg -ss 5 -t 7 -i input.mp4 -b:v 3000k seg2.mp4

ffmpeg -ss 12 -i input.mp4 -b:v 500k seg3.mp4

Шаг 2 — использовать ffmpeg для объединения закодированных сегментов в режиме копирования с помощью демультиплексора concat.

Подготовьте текстовый файл

file 'seg1.mp4'
file 'seg2.mp4'
file 'seg3.mp4'

а потом

ffmpeg -f concat -i list.txt -c copy joined.mp4

Клипы с разными свойствами, такими как разрешение, также могут быть объединены в один MP4, но совместимость между медиаплеерами сомнительна , и ffmpeg в любом случае не будет делать это надежно в настоящее время.

Интересный! У меня всегда было другое представление о том, что такое VBR и что он делает, с точки зрения «детализации». Попробую это. Кроме того, я подожду еще немного, пока, вероятно, не отмечу ваш ответ как принятый
Попробовав его и обнаружив, что он работает (как с vbr, так и с переменным размером), я обнаружил небольшую проблему: когда я редактирую один сегмент «как есть» с помощью «-vcodec copy», concat сообщит 1 , «Автоматическая вставка фильтра битового потока h264_mp4toannexb» (вроде нормально), 2. «Немонотонный DTS в выходном потоке» (арг!!) для этого сегмента. Есть ли способ сделать потоковую копию (без перекодирования), но с удалением временных меток. Насколько я понимаю, такая фильтрация вывода/этого сегмента исправит эту ошибку DTS (хотя видео все равно воспроизводится).
ffmpeg по умолчанию генерирует новые временные метки, если только вы не используете мультиплексоры сегментов или не указываете флаг, например copyts. С какой командой вы получаете ошибку?
Команда - это то, что вы предложили: ffmpeg -f concat -i list.txt -c copy joined.mp4, а в примере команды сегмента только средняя изменена на ... -i input.mp4 -vcodec copy seg2.mp4. Протестировано с ffmpeg 2.8.1, мой Ubuntu avconv еще не знает о concat.
Ах. При потоковом копировании резка не является точной. Вам придется вставить -avoid_negative_ts make_zero, но вы, вероятно, получите повтор с предыдущим сегментом.
На этапе сегментации или concat? Пробовал оба. Один вариант даже дал мне добавленную ошибку «Пакет с недопустимой продолжительностью». Извините за то, что это превратилось в тему... Кроме того, make_zeroэто значение для -avoid_negative_tsпереключателя, правильно. Где документы на него?
У меня был ограниченный успех с добавлением -copyts -start_at_zeroкаждой сегментации, больше не было предупреждений DTS о concat, но видео не воспроизводилось правильно.
Если вы перекодируете, вам не нужны эти флаги. Если вы не те двое, они не помогут. Вы собираетесь сегментировать весь файл?
Я прямо сейчас вставляю команды для воспроизведения в чат

Advanced Authoring Format (AAF) и некоторые операционные шаблоны MXF (OP-2a, 2b, 3a и 3b) должны поддерживать разные скорости передачи данных. Я говорю «должен», потому что сейчас у меня нет хорошего способа тестирования, и я не знаю ни одной коммерческой системы, которая активно использует эти MXF OP.

Ну, я не могу сказать, что знаю, как это будет сделано; но RED (www.red.com), их формат видео R3D использует процесс дебайера.

У меня RED Epic. Он снимает до 5K 100 FPS.

Когда вы находитесь в полевых условиях и хотите просмотреть видео, скажем, на ноутбуке, пропускная способность несжатого (или близкого к нему), скажем, 3:1 5K огромна.

Итак, RED использует процесс дебайера; где пиксели в основном назначаются шаблону сетки с точки зрения того, как они кодируются и декодируются.

Так что это устраняет необходимость в «прокси»-файлах, файлах, которые недоступны для редактирования, потому что ваша система просто не может воспроизводить файл в реальном времени.

Дебайер имеет 8 уровней. И RED player (а также поддерживающее его программное обеспечение, такое как PPro/After Effects, позволяют воспроизводить на 100%, 50%, 25%, 12,5% и так далее.

Уникальный аспект RED заключается в том, что когда ваш компьютер делает это, он на самом деле не снижает качество, а просто отображает желаемое качество x/100.

Так что, возможно, мой ответ немного отсталый: но, по сути, с файлами RED у вас есть версия 1K, 2K, 3K, 4K, 5K - все они упакованы в 1 файл.

Надеюсь, это, возможно, немного поможет, хотя это и не ответ на фактический вопрос.

Этот «ответ» на самом деле не является вопросом, который был задан. В нем не рассматривается, как решить эту проблему в целом (нельзя перекодировать любой случайный видеоформат в RED RAW). Насколько мне известно, нельзя на лету изменить параметры дебайера/сжатия RED как динамическое свойство носителя RED.
Скорее экскурс в форматы файлов, но в любом случае спасибо за усилия.
Кажется, я ясно сказал, что это не меняет параметры «дебайер/сжатие»; просто воспроизведение таких. Я также указал, что ответ не имеет прямого отношения к вопросу, тем более к «понятию».