Как извлечь «сохраненные кадры», не полагаясь на частоту кадров?

Вы только что допустили синтаксическую ошибку: вы написали "{$ f% _1.txt} _2.txt ", а правильная форма - " $ {f% _1.txt} _2.txt " (вы потеряли символ $ ).
:)
Edit: woops, я ошибся, потому что в блоке "$ {f% _1.txt} _2.txt" , Значение f по-прежнему user / admin / 1/2 / a / preQC_1.txt , так что в основном "$ {f% _1.txt} _2.txt" Значение - user / admin / 1/2 / a / preQC_2.txt , что вам не нужно.
Я бы рекомендовал в первую очередь обновить значение f , например

for f in ~/1/2/*/*_1.txt
f=${f##*/}
do exptool input1= "$f" input2= "${f%_1.txt}_2.txt"
done

, которое в значительной степени присоединяется к ответу Хауке Лейджинга.

1
14.02.2019, 17:28
1 ответ

Насколько я понял вопрос, вы хотите извлечь кадры из видео. Каждый кадр должен храниться в отдельном файле. Ожидается, что сумма размеров всех файлов будет соответствовать размеру видеофайла. Это верно только для некоторых конкретных видео. Я попытаюсь объяснить вещи в общих чертах.

TL;DR

Извлечение кадров из видео в формате h264 с тем же качеством изображения и размером файла -невозможно.

Форматы видеоконтейнеров сбивают с толку

Видеофайл в данном случае представляет собой файл MP4. MP4 — это контейнер для видеоданных. Однако тип контейнера ничего не говорит о фактическом содержимом. По факту,множество различных типов видеоформатов могут находиться внутри файла MP4 — точно так же, как zip-архив (или файл PDF ).

Существуют разные виды видео

Видео представляет собой последовательность изображений. Существует много способов сохранить эти изображения в видеопоток (кодировать )и как их потом читать (декодировать ). Алгоритмы обычно называются кодеками .

Имейте в виду, что не все кодеки поддерживают сжатие. В этом примере h264 является кодеком. По умолчанию кодировщик h264 вычисляет разницу между кадрами. В случае небольшой разницы кодер запоминает только разницу. Фактический кадр отбрасывается. Только первый¹ кадр сохраняется как полное изображение. Это экономит много места и является одной из стратегий сжатия. Декодер h264 применит сохраненную разницу к предыдущему кадру, воссоздав оригинал.

Как видите, кадры в вашем видео зависят друг от друга. Если вам нужны отдельные файлы, вы хотите, чтобы они были независимыми. Это означает, что вам всегда нужно хранить полную информацию для каждого отдельного кадра. Это означает, что вы не можете просто взять существующие данные и скопировать их в файлы, а должны -перекодировать видео. Попутно сумма файлов должна увеличиваться.

Вы можете прочитать о различных типах изображения при сжатии видео , в частности, о "разнице -на основе" между -кадрами или обзоре сжатия видео вообще .

h264 не является JPEG

Даже если мы говорим об отдельных образах. JPEG использует метод сжатия, известный как DCT . H.264 использует аналогичную, но улучшенную версию. Это означает, что JPEG не может сжиматься так же эффективно, как h264. Кстати, вы можете поместить сжатое изображение h264 в файл, используя HEIF (. По сути, это ведет себя как однокадровое видео -).


¹Это не совсем так, но я хочу пока упростить. На самом деле это больше похоже на «первый кадр сцены». Если хотите узнать подробности:
Кодер замечает начало отдельных сцен (в кинематографии, это обычно называется "обрезкой" ). Разница между кадрами очень велика и поэтому плохо сжимается. Кодер решает не использовать «основанный на разнице -» промежуточный кадр -. Вместо этого используется полное изображение (, которое называется «внутренним кадром -», также известным как «ключевой кадр -» ).
Также есть техническая причина :Только на внутренние -кадры вы можете быстро переходить при поиске по видео. Следовательно, внутренние -кадры также время от времени помещаются в поток (независимо от фактического видеоконтента ). Обычно видео имеет один внутренний -кадр в секунду.

Теперь мы многое узнали о сжатии видео. Это видео демонстрирует некоторые вещи:
Interesting ouput of damaged video file
Из-за повреждения файла это видео потеряло внутренний -кадр. Декодеру более-менее удается его воспроизвести. На потерянном кадре, вероятно, была изображена женщина, смотрящая в сторону. Теперь она поворачивает голову назад, декодер имеет только данные из промежуточных -кадров, которые включают некоторую информацию о движении. Похоже, что женщина оказалась с лицом на боку головы. Тем временем на заднем плане идет человек. Этот человек не присутствовал в потерянном внутреннем кадре -и поэтому выглядит вполне нормально.

3
27.01.2020, 23:30

Теги

Похожие вопросы