如何使用 FFmpeg 确定文件的视频编解码器
如果 AVI 文件不是 DivX 或 Xvid(例如,DX50 不可读),我在使用电视 DVD 播放器读取 AVI 文件时经常会遇到问题。我想制作一个快速脚本来确定这些文件的视频编解码器,然后再将它们刻录到 CD-ROM 或 DVD。
以下内容打印视频流的“容器”(mpeg4、mpeg2 等),但不打印编解码器:
ffmpeg -i file.avi
I often have problems reading AVI files with my TV's DVD player if they are not DivX or Xvid (e.g., DX50 is not readable). I'd like to make a fast script to determine the video codec of these files before burning them to CD-ROM or DVD.
The following prints the "container" of the video stream (mpeg4, mpeg2, etc), but not the codec:
ffmpeg -i file.avi
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
mediainfo
在我的情况下将返回:
感谢 如何使用 mediainfo 以秒为单位或其他格式查找视频文件的持续时间?
ffprobe (ffmpeg) 简单方法
假设您的视频只有一个视频流:
在我的情况下将返回:
感谢 如何获取以秒为单位的视频持续时间?
ffprobe (ffmpeg) dirty way
这种方法更容易理解,但是 使答案成为可能凌乱的。
要获取编解码器信息而不播放文件,请使用
ffprobe
。要提取视频编解码器信息 - 由于 ffmpeg 将信息发送到 stderr - pipe 并 grep it:
为了进一步减少输出,引入 sed:
mediainfo
will in my case return:
Answer made possible thanks to How to find duration of a video file using mediainfo in seconds or other formats?
ffprobe (ffmpeg) easy way
Assuming your video has one video stream only:
Will in my case return:
Answer made possible thanks to How to get video duration in seconds?
ffprobe (ffmpeg) dirty way
This method is easier to understand but messy.
To get the codec information without playing back the file, use
ffprobe
.To extract the video codec information - since ffmpeg sends information to stderr - pipe and grep it:
To reduce the output even further, introduce sed:
FFmpeg 也提供了编解码器。拉动
Stream #0.0: Video
行,您可以看到编解码器。 (请注意,从技术上讲,它可能具有不同的流编号,例如 0.1。)以下输出使用 MS Video-1。正如您所希望的,这与Input #0, avi
表示的容器不同,例如:
FFmpeg gives the codec too. Pull the
Stream #0.0: Video
line and you can see the codec. (Be aware that it could technically have a different stream number, like 0.1.) The below output uses the MS Video-1. This is different, like you desire, from the container which is denoted byInput #0, avi
E.g.:
请尝试使用 MediaInfo。
它列出了每个流的编解码器,其输出足够简单,易于解析 - 如果您更喜欢类似 XPath 的查询,还有一个 XML 输出选项。
Try MediaInfo instead.
It lists the codec for each stream and its output is simple enough to parse - there's also an XML output option if you prefer XPath like queries.
ffmpeg 有它。在Mac上我是这样做的:
首先像这样下载ffmpeg:
然后在命令行上运行它:
然后在输出中检查类似的内容:
持续时间: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 待定(默认)
ffmpeg has it. On mac i did it this way :
first download ffmpeg like this:
and then run this on the command line:
then check for something like this in the output:
Duration: 00:00:05.48, start: 0.000000, bitrate: 952 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 750x1334, 619 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
使用当前版本的 ffmpeg,运行 ffmpeg -i即可生成:
因此您可以看到此特定文件包含以 AAC-LC 编码的音频和视频在 H.264 中。没有进行编码,因此操作是立即的。
ffmpeg 版本 4.2
With the current version of ffmpeg it is enough to run
ffmpeg -i <my-video-file.mp4>
to produce:So you can see this particular file contains audio encoded in AAC-LC and video in H.264. No encoding is done, so the operation is immediate.
ffmpeg version 4.2