У меня есть видеофайл, и я хочу получить количество видеокадров в нем. Я могу использовать, ffmpeg
чтобы получить длину видео и FPS. Однако я не вижу ничего очевидного для общего количества кадров.
Теоретически можно умножить длину (в секундах) на FPS, чтобы получить количество кадров, но в этом случае длина (34,43 секунды) и частота кадров (29,97 кадров в секунду) дают нецелое число, что делает меня думаю, что я делаю что-то не так.
Я должен быть в состоянии сделать это в командной строке полностью автоматизированным и неграфическим способом. Мне также нужно, чтобы это было довольно точно, а не оценка (если это возможно даже с видеофайлами)
Я пытался использовать tcprobe
некоторые файлы. Для некоторых файлов AVI это работает, но для некоторых файлов VOB вывод tcprobe не имеет количества кадров. Я получаю этот вывод:
[tcprobe] MPEG program stream (PS)
[tcprobe] summary for myfile.vob, (*) = not default, 0 = not detected
import frame size: -g 720x480 [720x576] (*)
aspect ratio: 4:3 (*)
frame rate: -f 29.970 [25.000] frc=4 (*)
PTS=2199.3972, frame_time=33ms bitrate=7000 kbps
audio track: -a 0 [0] -e 48000,16,5 [48000,16,2] -n 0x2000 [0x2000] (*)
PTS=2199.2763, bitrate=192 kbps
-D 3 --av_fine_ms 20 (frames & ms) [0] [0]
Ответы:
Это ужасно, глупо и медленно, но, похоже, работает
Он также будет работать прямо на усеченных файлах и сырых потоках (поэтому вы ничего не получаете за файлы .vob)
источник
| tr ^M '\n'
и|tail -n 1
. Кроме того, ни один пробел послеframes=
не подводит. (Может быть, что-то изменилось за последние четыре года.)ffprobe
может использоваться для получения информации о медиафайле:Вы получите подробную информацию о потоке:
Ищите
nb_frames
сgrep
:Это работает для avi, mp4 и т. Д. Для некоторых контейнеров не отображается допустимое значение, например, mpeg.
В этом случае это работает
ffprobe -show_packets a.mpg 2>/dev/null | grep video | wc -l
источник
Я отправил это на другой вопрос . Используя
tcprobe
инструмент (изtranscode
пакета), количество кадров включается в информацию. Используйте-i
переключатель, чтобы получить информационный дамп из файла:Обратите внимание, что количество кадров указано здесь в двух строках (вторая строка вывода и последняя строка вывода).
источник
Я обнаружил, что это
mediainfo --fullscan inputfile | grep "Frame count"
прекрасно работает для большинства файлов.Системы на основе Debian могут установить его с
apt-get install mediainfo
Если вы получаете 2 строки, а не одну из выходных данных, первая строка - это дорожка видео, а вторая - звуковая дорожка. Похоже, что это происходит на файлах с переменным битрейтом аудио.
Проверено на образцах .mkv, .m4v, .mp4, flv, vob и .avi на дату редактирования.
Источники: Как получить информацию о видеофайле из командной строки под Linux? и тестирование под Ubuntu.
Вы можете найти mediainfo для вашей ОС здесь.
источник
Сложите продолжительность. Может быть моднее с sed / awk, а что нет.
По результатам нашего тестирования я могу сказать, что на данный момент он показал себя как самый надежный. Вы получаете точное количество кадров и точную продолжительность. Даже с переменной частотой кадров, которую все другие инструменты, такие как mediainfo, кажутся непростыми.
источник
Я обнаружил, что количество кадров на самом деле вдвое больше длительности fps * (не знаю почему, я был бы рад узнать).
В моем сценарии у меня есть:
И да, по какой-то причине я должен получить целую часть этого. Это не имеет смысла, но этот скрипт до сих пор всегда правильно конвертировал мои видео.
источник
tcprobe
выход в моем ответе дает # кадров , как ровно секунд * кадров в секунду (округленной вверх). я ожидаю, что вы видите причуду ffmpeg. Вы пытались проанализировать файл с помощью других инструментов, чтобы увидеть, показывают ли они одинаковое количество кадров?seconds*fps=1001.59
иtcprobe=1002
. Очевидно,tcprobe
говорит мне, что мне не нужно умножать на два. Почему тогда ffmpeg дает мне число, которое в два раза больше в журналах при конвертации?Проверено на Ubuntu.
melt
- melt задумывался как инструмент тестирования для среды MLT, но он также является мощным многодорожечным редактором видео, ориентированным на командную строку. Он также может использоваться как минималистичный медиаплеер для аудио и видео файлов.-consumer
id [: arg] [name = value] *Установить потребителя (приемник)
xml
- Установите для потребителя (приемника) вывод в формате xml<property name="length">nnnn</property>
- показывает количество кадров, гдеnnnn
заменяется целым числом, равным количеству кадровЕсли у вас нет melt, вы можете установить его в Ubuntu и других системах на основе Debian с
sudo apt-get install melt
источник
mediainfo -fullscan filename
.Прямо с
mediainfo
, без grep, без ожидания, без ничегоДля получения дополнительной информации см.
mediainfo --info-parameters
источник
Вы можете сделать это, добавив и умножив значения, полученные из ffprobe.
Примечание: ffprobe является частью libav (avconv) - версии ffmpeg для Linux.
Когда вы сделаете это, вы получите количество кадров в секунду, а также продолжительность клипа.
Преобразуйте длительность клипа в секунды и умножьте это значение на количество кадров в секунду.
Не забудьте округлить число до ближайшего.
источник
ffprobe
отсутствует, но есть нечто , называемоеavprobe
вlibav-tools
(который такжеavconv
). Но на моей стороне он не печатает любое количество кадров, по крайней мере, не для форматов, которые я пробовал. Он просто печатает, чтоavprobe -i
печатает тоже, и это, к сожалению, лишь незначительные детали формата. Даже с-v debug
этим он говорит только о некоторых хороших свойствах моего оборудования и установленного программного обеспечения, но ни о какой интересной информации о файле / потоке для исследования. Возможно, это скрывается в некоторых из множества доступных вариантов. Кто знает?ffmpeg
в официальных репозиториях. Ссылка, которую вы дали правильно, гласит: FFmpeg вернулся в Ubuntu 15.04 "Vivid Vervet". , Однако ситуация изменилась, так как 16.04 LTS отсутствует.линукс
Рубин
источник
Лучший метод: (Прямой расчет правильных параметров, подтвержденный ffmpeg)
Cmd ->
Результат ->
Расчет ->
Доказательство ->
Вот
Выход
источник