如何使用ffmpeg识别文件的视频编解码器

Ger*_*gan 19 video ffmpeg

如果它们不是divx或xvid(DX50,即不可读),我经常在使用我的电视DVD播放器阅读AVI文件时遇到问题.

我想制作一个快速脚本来识别这些文件的视频编解码器,然后再将其刻录到cdrom/dvd上.

命令 :

ffmpeg -i file.avi
Run Code Online (Sandbox Code Playgroud)

给出视频流的"容器"(mpeg4,mpeg2等),而不是编解码器.

任何提示?

谢谢

qub*_*dup 38

媒体信息

mediainfo --Inform="Video;%Codec%" video.mkv
Run Code Online (Sandbox Code Playgroud)

将我的案件归还:

V_MPEG4/ISO/AVC
Run Code Online (Sandbox Code Playgroud)

由于如何使用mediainfo以秒或其他格式查找视频文件的持续时间,所以答案成为可能

ffprobe(ffmpeg)简单方法

假设您的视频只有一个视频流:

ffprobe -v error -select_streams v:0 -show_entries stream=codec_name \
  -of default=noprint_wrappers=1:nokey=1 video.mkv
Run Code Online (Sandbox Code Playgroud)

在我的情况下将返回:

h264
Run Code Online (Sandbox Code Playgroud)

由于如何在几秒钟内获得视频持续时间,答案成为可能

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
Run Code Online (Sandbox Code Playgroud)

提取视频编解码器信息 - 因为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

  • 您还可以使用-show_streams(和其他相关选项),而不是使用有些模糊和不稳定的sed/grep选项."ffprobe $ file -show_streams | grep ^ codec_name ="将提供编解码器输出,但采用更向前兼容的方法. (5认同)

Stu*_*son 8

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$ 
Run Code Online (Sandbox Code Playgroud)