Как распознать видеокодек файла с ffmpeg
У меня часто возникают проблемы с чтением AVI файла с помощью моего телевизора dvd-проигрывателя, если они не являются divx или xvid (DX50, т.е. не читается).
Я хочу, чтобы быстрый script распознал видеокодек этих файлов, прежде чем записывать его на cdrom/dvd.
Команда:
ffmpeg -i file.avi
предоставить "контейнер" видеопотока (mpeg4, mpeg2 и т.д.), а не кодек.
Любые подсказки?
Спасибо
Ответы
Ответ 1
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 it:
$ 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
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$
Ответ 3
Попробуйте MediaInfo вместо этого.
Он перечисляет кодек для каждого потока, а его вывод достаточно прост для анализа - есть также опция вывода XML, если вы предпочитаете запросы XPath, такие как запросы.
Ответ 4
У него есть 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 (eng): Видео: h264 (основной) (avc1/0x31637661), yuv420p (tv, bt709), 750x1334, 619 кбит/с, 29,97 fps, 29,97 tbr, 30k tbn, 59,94 tbc (по умолчанию)