2010-05-19 29 views
10

Tôi thường gặp vấn đề khi đọc tập tin AVI với đầu phát DVD TV nếu chúng không phải là divx hoặc xvid (DX50, tức là, không đọc được).cách nhận dạng codec video của một tập tin với ffmpeg

Tôi muốn tạo một kịch bản nhanh để nhận dạng codec video của các tệp này trước khi ghi lên cdrom/dvd.

Lệnh:

ffmpeg -i file.avi 

cung cấp cho các "container" của dòng video (mpeg4, mpeg2, vv), không phải là codec.

Bất kỳ gợi ý nào?

Cảm ơn

+0

Không thể tái tạo. ffmpeg-0.5-5.20091026svn.fc12.x86_64 –

Trả lời

2

FFmpeg cũng cung cấp codec. Kéo dòng Stream #0.0: Video và bạn có thể xem codec. (Lưu ý rằng về mặt kỹ thuật nó có thể có một số luồng khác nhau, như 0,1.) Đầu ra dưới đây sử dụng MS Video-1. Đây là khác nhau, như bạn mong muốn, từ container được ký hiệu bằng Input #0, avi

ví dụ .:

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

Hãy thử MediaInfo để thay thế.

Nó liệt kê bộ giải mã cho mỗi luồng và đầu ra của nó đủ đơn giản để phân tích - cũng có tùy chọn đầu ra XML nếu bạn thích XPath như truy vấn.

20

MediaInfo

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

sẽ trường hợp của tôi trở lại:

V_MPEG4/ISO/AVC 

trả lời đã có thể nhờ How to find duration of a video file using mediainfo in seconds or other formats?

ffprobe (ffmpeg) dễ dàng cách

Giả video của bạn có một chỉ luồng video:

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

Will trong trường hợp tôi trở lại:

h264 

trả lời đã có thể nhờ How to get video duration in seconds?

ffprobe (ffmpeg) cách bẩn

Phương pháp này là dễ hiểu nhưng lộn xộn.

Để nhận thông tin về codec mà không phát lại tệp, hãy sử dụng 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 

Để trích xuất các thông tin video codec - kể từ ffmpeg gửi thông tin đến stderr - pipe và grep nó:

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

Để giảm này hơn nữa, giới thiệu sed:

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

Bạn cũng có thể sử dụng -show_streams (và các tùy chọn liên quan khác) thay vì sử dụng tùy chọn sed/grep hơi mơ hồ và không ổn định. "ffprobe $ file -show_streams | grep^codec_name =" sẽ cung cấp đầu ra codec, nhưng theo phương thức tương thích về phía trước hơn. –

0

ffmpeg có nó. Trên mac tôi đã làm nó theo cách này:

đầu tiên tải về ffmpeg như thế này:

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 

và sau đó chạy trên dòng lệnh:

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

sau đó kiểm tra cho một cái gì đó như thế này trong đầu ra :

Thời gian: 00: 00: 05,48, hãy bắt đầu: 0,000000, bitrate: 952 kb/s Suối # 0: 0 (eng): video: h264 (Chính) (avc1/0x31637661), yuv420p (tv, bt709), 750x1334, 619 kb/s, 29,97 fps, 29,97 tbr, 30k tbn, 59,94 tbc (mặc định)

Các vấn đề liên quan