how to recognize video codec of a file with ffmpeg
如果它们不是divx或xvid(DX50,即不可读),我经常在使用我的电视DVD播放器读取AVI文件时遇到问题。
我想制作一个快速脚本来识别这些文件的视频编解码器,然后再将其刻录到cdrom / dvd上。
命令 :
1 | ffmpeg -i file.avi |
给出视频流的"容器"(mpeg4,mpeg2等),而不是编解码器。
任何提示?
谢谢
媒体信息
1 | mediainfo --Inform="Video;%Codec%" video.mkv |
我的案子会回来:
1 | V_MPEG4/ISO/AVC |
答案成功了,谢谢
如何使用mediainfo以秒或其他格式查找视频文件的持续时间?
ffprobe(ffmpeg)简单方法
假设您的视频只有一个视频流:
1 2 | ffprobe -v error -select_streams v:0 -show_entries stream=codec_name \ -of default=noprint_wrappers=1:nokey=1 video.mkv |
在我的情况下将返回:
1 | h264 |
由于如何在几秒钟内获得视频持续时间,答案成为可能?
ffprobe(ffmpeg)肮脏的方式
这种方法更容易理解,但很麻烦。
要在不播放文件的情况下获取编解码器信息,请使用
1 2 3 4 5 6 7 8 9 10 11 12 | $ 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它:
1 2 | $ 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:
1 2 | $ ffprobe video.mkv 2>&1 >/dev/null |grep Stream.*Video | sed -e 's/.*Video: //' -e 's/[, ].*//' h264 |
请尝试使用MediaInfo。
它列出了每个流的编解码器,其输出很简单,可以解析 - 如果您喜欢类似XPath的查询,还有一个XML输出选项。
FFmpeg也提供了编解码器。拉
例如。:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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$ |
ffmpeg有它。在Mac上,我这样做:
首先像这样下载ffmpeg:
1 | 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 |
然后在命令行上运行它:
1 2 3 4 5 | ffmpeg -filter:v idet \ -frames:v 100 \ -an \ -f rawvideo -y /dev/null \ -i ~/Downloads/yourfile.mp4 |
然后在输出中检查这样的东西:
持续时间:00:00:05.48,开始:0.000000,比特率:952 kb / s
流#0:0(eng):视频:h264(主)(avc1 / 0x31637661),yuv420p(tv,bt709),750x1334,619 kb / s,29.97 fps,29.97 tbr,30k tbn,59.94 tbc(默认)