как распознать видеокодек файла с помощью ffmpeg - PullRequest
14 голосов
/ 20 мая 2010

У меня часто возникают проблемы с чтением AVI-файла с моего DVD-плеера, если они не DivX или XVID (т.е. DX50, т.е. не читается).

Я бы хотел сделать быстрый скрипт для распознавания видеокодека этих файлов перед записью его на cdrom / dvd.

Команда:

ffmpeg -i file.avi

укажите «контейнер» видеопотока (mpeg4, mpeg2 и т. Д.), А не кодек.

Любой намек?

Спасибо

Ответы [ 4 ]

33 голосов
/ 13 апреля 2015

MediaInfo

mediainfo --Inform="Video;%Codec%" video.mkv

вернется ли мой случай:

V_MPEG4/ISO/AVC

Ответ стал возможен благодаря Как узнать длительность видеофайла с использованием mediainfo в секундах или других форматах?

ffprobe (ffmpeg) простой способ

Предполагается, что ваше видео имеет только один видеопоток:

ffprobe -v error -select_streams v:0 -show_entries stream=codec_name \
  -of default=noprint_wrappers=1:nokey=1 video.mkv

В моем случае вернется:

h264

Ответ стал возможен благодаря Как узнать продолжительность видео в секундах?

ffprobe (ffmpeg) грязный путь

Этот метод проще для понимания, но грязный.

Чтобы получить информацию о кодеке без воспроизведения файла, используйте ffprobe.

$ ffprobe video.mkv
[...]
Input #0, matroska,webm, from 'video.mkv':
  Metadata:
    ENCODER         : Lavf56.25.101
  Duration: 00:28:05.15, start: 0.000000, bitrate: 4353 kb/s
    Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 1280x960, SAR 1:1 DAR 4:3, 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc (default)
    Metadata:
      ENCODER         : Lavc56.26.100 libx264
    Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
    Metadata:
      ENCODER         : Lavc56.26.100 libvorbis

Чтобы извлечь информацию о видеокодеке - поскольку ffmpeg отправляет информацию в stderr - pipe и grep:

$ ffprobe video.mkv 2>&1 >/dev/null | grep Stream.*Video
    Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 1280x960, SAR 1:1 DAR 4:3, 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc (default)

Чтобы еще больше уменьшить это, введите sed:

$ ffprobe video.mkv 2>&1 >/dev/null |grep Stream.*Video | sed -e 's/.*Video: //' -e 's/[, ].*//'
h264
2 голосов
/ 22 июня 2011

Попробуйте MediaInfo вместо.

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

2 голосов
/ 20 мая 2010

FFmpeg тоже дает кодек. Потяните линию Stream #0.0: Video, и вы увидите кодек. (Имейте в виду, что технически он может иметь другой номер потока, например 0,1.) В приведенном ниже выводе используется MS Video-1. Это отличается, как вы хотите, от контейнера, который обозначается Input #0, avi

Например:

FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --prefix=/opt/local --disable-vhook --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libfaac --enable-libfaad --enable-libxvid --enable-libx264 --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 0 / 52.20. 0
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    1. 4. 0 /  1. 4. 0
  libswscale     1. 7. 1 /  1. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Jan  8 2010 15:34:15, gcc: 4.2.1 (Apple Inc. build 5646) (dot 1)
Input #0, avi, from 'Movies/fvss_demo.avi':
  Duration: 00:02:00.30, start: 0.000000, bitrate: 719 kb/s
    Stream #0.0: Video: msvideo1, rgb555, 160x120, 10 tbr, 10 tbn, 10 tbc
    Stream #0.1: Audio: pcm_u8, 8000 Hz, mono, s16, 64 kb/s
At least one output file must be specified
manoa:~ stu$ 
0 голосов
/ 14 июня 2017

у ffmpeg есть.На Mac я сделал это следующим образом:

сначала загрузите ffmpeg следующим образом:

brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools

, а затем запустите это в командной строке:

ffmpeg -filter:v idet \
    -frames:v 100 \
    -an \
    -f rawvideo -y /dev/null \
    -i ~/Downloads/yourfile.mp4

, затем проверьтечто-то вроде этого в выводе:

Длительность: 00: 00: 05.48, начало: 0,000000, битрейт: 952 кбит / с Поток # 0: 0 (англ): Видео: h264 (Main) (avc1 / 0x31637661), yuv420p (tv, bt709), 750x1334, 619 кбит / с, 29,97 к / с, 29,97 тб, 30 Кбит / с, 59,94 тбк (по умолчанию)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...