Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Вниз

Удалить часть данных из открытого файла   Найти похожие ветки 

 
AlexOld   (2008-10-02 11:21) [0]

Файл большого размера (видеофильм, не AVI) открывается как типизированный или нетипизированный. Он содержит испорченные кадры. Как их удалить, не затрагивая остальные?


 
Сергей М. ©   (2008-10-02 11:28) [1]

Можно подумать, что ты знаешь как это сделать затрагивая остальные ?


 
AlexOld   (2008-10-02 11:52) [2]

Программа просмотра позволяет просматривать фильм по кадрам. Испорченный сразу виден. Известен указатель на него, но не знаю, как удалить этот кадр (в типизированном файле), или известное число байт от указанного адреса в нетипизированном.


 
Palladin ©   (2008-10-02 12:16) [3]

чья программа?


 
AlexOld   (2008-10-02 12:29) [4]

Программа моя. Справка: файл представляет собой набор яркостей (ч/б) пикселей, в каждом кадре 576х768 пикселей. Просмотр как типиз. или нетипиз. файла с помощью указателя и выводом на экран.


 
Сергей М. ©   (2008-10-02 12:29) [5]


> Известен указатель на него


Указатель указывает не на кадр, а на адрес в адресном пространстве процесса.


 
AlexOld   (2008-10-02 12:36) [6]

Сергею М.
Естественно, это я написал для сокращения. Можно записывать целые кадры в новый файл функциями FileWrite или BlockWrite, но это дольше, чем удалить испорченные данные из оригинала.


 
Сергей М. ©   (2008-10-02 13:34) [7]


> AlexOld   (02.10.08 12:36) [6]


Ну хорошо, давай ближе к телу.

Покажи код, который у тебя делает это "дольше" чем тебе хотелось бы ..


 
AlexOld   (2008-10-02 13:58) [8]

var
FHandle: Integer;     //Дескриптор открытого файла видео
FSHandle: Integer;   //Дескриптор файла, куда сохраняю целые кадры
bytes: Byte;           //число байт на пиксел
Procedure TForm1.SaveKadres;
var
  i: Integer;
begin
  if SaveDialog3.Execute then  begin
  FSHandle:= FileCreate(SaveDialog3.FileName);
  StartKadr:= StrToInt(Trim(Form2.edStartKadr.Text))-1;
  EndKadr:= StrToInt(Trim(Form2.edEndKadr.Text));
     for i:= StartKadr to EndKadr do
     begin
  FileSeek(FHandle,bytes*576*768*i,0);
  FileRead(FHandle,FileArray,bytes*cl*768);
  FileWrite(FSHandle,FileArray,bytes*cl*768);
     end;
end;
И так для всех целых кадров, только пишу в открытый файл.


 
Palladin ©   (2008-10-02 14:24) [9]

А по другому никак. Единственное можно просто сдвинуть целые кадры (грубо говоря куски информации), которые после попорченных на их место попорченных, будет чуток быстрее. Но естественно оригинальный файл не сохранится и если накосячишь... то накосячишь


 
Сергей М. ©   (2008-10-02 14:32) [10]

И где тут идет фигурирует файл именно видеофильма ?

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

Ни заголовка нет, ни чего-то еще характерного даже для слайд-шоу, не говоря уже о видеотреке ..

А что в данном случае считается "испорченным кадром" ?


 
Sapersky   (2008-10-02 15:45) [11]

Как вариант - при удалении кадра копировать последний на его место и обрезать файл на 1 кадр, а чтобы сохранить последовательность при воспроизведении - добавить к файлу таблицу размещения кадров, в которой будет прописано, где какой кадр лежит. Таблицу можно писать в конец, зарезервировав 1-е 4(8) байтов в начале файла как смещение таблицы.


 
antonn ©   (2008-10-03 01:40) [12]


> Ни заголовка нет, ни чего-то еще характерного даже для слайд-
> шоу, не говоря уже о видеотреке ..

"Видеотрек" не имеет никакого отношения ни к формату ни к технологии как таковой. (с) почти Сергей М. :)
достаточно того, что его программа кушая этот файл показывает быстро сменяющиеся кадры, что обычно называют "видео", "кино".

Испорченый кадр может представлять собой "испорченую картинку". Это такой набор байт, который не имеет смысла в контексте всего "видеотрека" (так, на всякий случай, вдруг будет еще один приступ букводности).
Итого автору нужно было посоветовать как быстро сместить блок данных от конца испорченого кадра и до конца файла к началу плохого кадра, тем самым удалив испорченый кадр. Зачем лить воду и запутывать автора буквоежкиными методами - не понятно.


 
Сергей М. ©   (2008-10-03 08:07) [13]


> Зачем лить воду и запутывать автора буквоежкиными методами
> - не понятно


Затем что вопрос не имеет к медиа ни малейшего отношения - с тем же успехом вопрос про быструю перезапись структурированного файла можно задать в "Начинающие" и не парить мозги про кадры и их "испорченность")


 
Сергей М. ©   (2008-10-03 08:12) [14]


> Итого автору нужно было посоветовать как быстро сместить
> блок данных


Вот возьми и посоветуй)

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


 
AlexOld   (2008-10-06 16:04) [15]

Всем спасибо. Я и сам думал, зачем мой вопрос поместили в мультимедиа?
А по поводу смещения целой части назад на место испорченного кадра - испорченных кадров может быть больше десяти. Испорченный кадр - сбои при записи через фрейм-граббер. Наверное, лучший выход - писать-таки целые кадры в новый файл после просмотра и фиксации испорченных.


 
antonn ©   (2008-10-06 16:08) [16]

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



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
15-1315555388
Василий Жогарев
2011-09-09 12:03
2012.03.18
Перевод заголовочного файла *.h в подключаемый модуль *.pas


2-1323074117
Бездомный
2011-12-05 12:35
2012.03.18
Как получить данные из DataSet не меняя его активную запись.


15-1322123135
Медвежонок Пятачок
2011-11-24 12:25
2012.03.18
"А при Фрэнке такого не было"


1-1289241191
DevilDevil
2010-11-08 21:33
2012.03.18
BASM overload


3-1273165307
Роман
2010-05-06 21:01
2012.03.18
DataSnap





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский