разделить видео (avi / h264) на ключевом кадре - PullRequest
2 голосов
/ 14 июня 2010

Hallo.

У меня большой видеофайл. ffmpeg, tcprobe и другие инструменты говорят, что это поток h264 в AVI-контейнере.

Теперь я хотел бы вырезать небольшие кусочки из видео.

  1. Проблема: поврежден / уничтожен индекс шва видео. Я вроде исправил это через mplayer -forceidx -saveidx <IndexFile> <BigVideoFile>. Проблема здесь в том, что я сейчас застрял с mplayer / mencoder, который может использовать этот индексный файл через -loadidx <IndexFile>. Я попытался исправить индекс, как описано в man aviindex (mplayer -frames 0 -saveidx mpidx broken.avi ; aviindex -i mpidx -o tcindex ; avimerge -x tcindex -i broken.avi -o fixed.avi), но это не помогло исправить мое видео - это означает, что большинство протестированных мною инструментов не смогли найти в видеофайле.

  2. Проблема: я вырезал части видео с помощью следующей команды: mencoder -loadidx in.idx -ss 8578 -endpos 20 -oac faac -ovc x264 -sws 9 -lavfopts format=mp4 -x264encopts <LotsOfOpts> -of lavf -vf scale=800:-10,harddup in.avi -o out.mp4. Теперь здесь проблема заключается в том, что некоторые видео изначально повреждены. Я думаю, что это потому, что тот факт, что я не обязательно сократить на ключевом кадре.

Вопросы:

  1. Каков наилучший способ исправить индекс "встроенного" avi, чтобы каждый инструмент снова мог работать с ним как положено?

  2. Как разделить ключевые кадры? Для этого есть опция mencoder?

  3. Имеют ли ключевые кадры частоту? Как узнать эту частоту? (Так что с небольшим количеством математики должно быть возможно вычислить следующий ключевой кадр и сократить там)

  4. Возможно, это какой-то другой способ разделить этот фильм? Делать это вручную не вариант, я должен вырезать более 1000 кусков ...

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 19 января 2011

https://spreadsheets.google.com/ccc?key=0AjWmZ0umsuZHdHNzZVhuMTkxTHdYbUdCQzF3cE51Snc&hl=en перечисляет различные опции, доступные для точного разделения.

0 голосов
/ 15 июня 2010

Я бы попытался использовать avidemux для восстановления файла, прежде чем что-либо делать.Вы также можете получить лучшие результаты при использовании контейнера на основе MP4, чем AVI.

Что касается обеспечения того, что указанные вами интервалы находятся прямо на ключевом кадре, я бы предложил использовать кодировку FFMPEG с параметром: -g 1 перед использованием разделения нижечтобы каждый кадр на самом деле был ключевым.FFMPEG ссылается на ключевые кадры как GOP или Группы изображений вместо.

ffmpeg -i input.avi -g 1 -vcodec copy -acodec copy out.avi

Затем несколько разбиений (с FFMPEG):

ffmpeg -i input.avi -ss 00:00:10 -t 00:00:30 out1.avi -ss 00:00:35 -t 00:00:30 out2.avi

Еще несколько вариантов, чтобы попробовать:

x264 Отображение кодировки FFMPEG в linux

...