Извлечение базовой информации из файла анимации - PullRequest
0 голосов
/ 09 октября 2009

Я пишу приложение, которое обрабатывает метаданные для изображений и всех видов анимации, поэтому я ищу способ найти основную информацию о файле анимации, например:

  • длина (в минутах / секундах / кадрах)
  • соотношение сторон пикселей
  • разрешение отдельных кадров
  • 1010 * фреймрейт *

Прямо сейчас я позволю своей программе исполниться

mplayer -identify animfile.avi

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

Я пробовал

vlc -vv animfile.avi

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

Есть ли более простой способ извлечь основную информацию из анимации любого формата, для которой имеется декодер (особенно длина анимации), с использованием vlc или других приложений / библиотек, которые обычно доступны в типичной установке Linux?

Редактировать: Я бы предпочел использовать другую программу для грязной работы, поскольку она должна работать для любого формата анимации, например, AVI, MPG, MOV, WMV, VOB и т. Д.

Редактировать: totem-video-indexer кажется более перспективным, и также был включен в стандартную установку. Достаточно кодеков, чтобы сделать его полезным, однако, не было. Это можно исправить установкой пакета «non-free-codecs» из medibuntu.

Ответы [ 3 ]

1 голос
/ 09 октября 2009

Вывод totem-video-indexer очень легко разобрать:

TOTEM_INFO_DURATION=5217
TOTEM_INFO_HAS_VIDEO=True
TOTEM_INFO_VIDEO_WIDTH=720
TOTEM_INFO_VIDEO_HEIGHT=480
TOTEM_INFO_VIDEO_CODEC=XVID MPEG-4
TOTEM_INFO_FPS=30
TOTEM_INFO_HAS_AUDIO=True
TOTEM_INFO_AUDIO_BITRATE=50
TOTEM_INFO_AUDIO_CODEC=MPEG 1 Audio, Layer 3 (MP3)
TOTEM_INFO_AUDIO_SAMPLE_RATE=48000
TOTEM_INFO_AUDIO_CHANNELS=Stereo
0 голосов
/ 10 декабря 2009

mediainfo - довольно полезная программа. Это LGPL, и это просто интерфейс для libmediainfo, который должен быть именно тем, что вы хотите.

http://mediainfo.sf.net/

0 голосов
/ 09 октября 2009

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

Например, вы спрашивали о ширине и высоте. На самом деле существует четыре различных спецификации ширины / высоты для одного кадра: ширина / высота экрана, ширина / высота пикселя (из которого вы получаете соотношение сторон пикселя), активная ширина / высота и сжатая ширина / высота. Ширина и высота кадра - это (теоретический) размер экрана. Активная ширина / высота исключает область сверхсканирования. Сжатая ширина / высота учитывает округление - например, JPEG сжимает в блоки 8x8 пикселей, поэтому сжатые ширина и высота должны быть кратны 8 для файла JPEG движения. Активная ширина / высота говорит вам, если (например) некоторые пиксели на границе следует игнорировать.

В любом случае, поскольку ваш вопрос помечен C ++, я предполагаю, что вы предпочли бы прочитать файл и получить данные напрямую, чем зависеть от того, чтобы создать грязную работу. Если это так, вы, вероятно, захотите взглянуть на спецификацию OpenDML AVI . Вы можете получить хотя бы некоторое представление о длине, разрешении и частоте кадров, просто прочитав базовый заголовок AVI, который находится в фиксированном месте в начале файла, так что многое можно получить тривиально. Хотя, чтобы достичь пропорции пикселя, потребуется немного больше работы ...

...