2010-05-19 1 views
10

У меня часто возникают проблемы с чтением файла AVI с помощью моего телевизора dvd-проигрывателя, если они не являются divx или xvid (DX50, т. Е. Не читается).Как распознать видеокодек файла с ffmpeg

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

Команда:

ffmpeg -i file.avi 

дать "контейнер" видеопотока (mpeg4, mpeg2, и т.д.), а не кодек.

Подсказка?

Thanks

+0

Невозможно воспроизвести. ffmpeg-0.5-5.20091026svn.fc12.x86_64 –

ответ

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$ 
2

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

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

20

MediaInfo

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

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

V_MPEG4/ISO/AVC 

Ответ стало возможным благодаря How to find duration of a video file using mediainfo in seconds or other formats?

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

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

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

Будет ли в моем случае возвращения:

h264 

Ответ стало возможным благодаря How to get video duration in seconds?

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 посылает информацию в поток ошибок - 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)

Чтобы уменьшить это еще дальше, ввести СЕПГ:

$ ffprobe video.mkv 2>&1 >/dev/null |grep Stream.*Video | sed -e 's/.*Video: //' -e 's/[, ].*//' 
h264
+2

Вы также можете использовать -show_streams (и другие связанные параметры) вместо использования несколько неясных и нестабильных параметров sed/grep. «ffprobe $ file -show_streams | grep^codec_name =» предоставит вывод кодека, но в более прямом-совместимом методе. –

0

FFmpeg есть это. На макинтош я сделал это так:

первой загрузки 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 kb/s, 29,97 fps, 29,97 tbr, 30k tbn, 59,94 tbc (по умолчанию)