2010-05-19 11 views
10

Mam często problemy z odczytaniem pliku AVI z moim odtwarzaczem dvd TV, jeśli nie są one divx lub xvid (DX50, tj. Nie jest do odczytu).jak rozpoznać kodek wideo pliku z ffmpeg

Chciałbym zrobić szybki skrypt, aby rozpoznać kodek wideo tych plików, zanim nagrasz go na cdrom/dvd.

Polecenie:

ffmpeg -i file.avi 

uzyskując "pojemnik" w strumieniu wideo (MPEG2 MPEG4, etc.), nie kodek.

Dowolna podpowiedź?

Dzięki

+0

Nie można odtworzyć. ffmpeg-0.5-5.20091026svn.fc12.x86_64 –

Odpowiedz

2

FFmpeg daje kodek też. Pociągnij linię Stream #0.0: Video, a zobaczysz kodek. (Należy pamiętać, że może to technicznie mieć inny numer strumienia, np. 0.1.) Poniższy wynik wykorzystuje MS Video-1. To jest inna, jak chcecie, z pojemnika, który jest oznaczony przez Input #0, avi

Np .:

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

Spróbuj MediaInfo zamiast.

Wymienia kodek dla każdego strumienia, a jego wynik jest wystarczająco prosty do przeanalizowania - istnieje również opcja wyjścia XML, jeśli preferujesz zapytania typu XPath.

20

MediaInfo

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

będzie moja sprawa powrotu:

V_MPEG4/ISO/AVC 

odpowiedzi możliwe dzięki How to find duration of a video file using mediainfo in seconds or other formats?

ffprobe (ffmpeg) łatwy sposób

Zakładając, że film ma jeden tylko strumień wideo:

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

Czy w moim przypadku powrotu:

h264 

odpowiedzi możliwe dzięki How to get video duration in seconds?

ffprobe (ffmpeg) brudnej drodze

Metoda ta jest łatwiejsza do zrozumienia, ale niechlujny.

Aby uzyskać informacje o koderze bez odtwarzania pliku, użyj 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 

Aby wydobyć informacje kodeka wideo - od ffmpeg wysyła informację do stderr - pipe i grep go:

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

Aby to zmniejszyć jeszcze bardziej, wprowadzenie sed:

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

Możesz również użyć opcji -show_streams (i innych powiązanych opcji) zamiast używać nieco niejasnych i niestabilnych opcji sed/grep. "ffprobe $ file -show_streams | grep^codec_name =" dałoby dane wyjściowe kodeka, ale w bardziej zgodnej z przyszłością metodzie. –

0

ffmpeg ma to. Na mac zrobiłem to w ten sposób:

pierwszy pobieranie ffmpeg tak:

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 

a następnie uruchomić to w wierszu poleceń:

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

następnie sprawdzić na coś takiego na wyjściu :

Czas trwania: 00: 00: 05,48, start: 0.000000, bitrate: 952 kb/s Stream # 0: 0 (pol): video: h264 (Main) (avc1/0x31637661), yuv420p (tv, bt709), 750x1334, 619 kb/s, 29,97 fps, 29,97 tBr, 30k tbn, 59,94 tbc (domyślnie)