首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ff探头检查文件是否仅为音频或视频

使用ff探头检查文件是否仅为音频或视频
EN

Stack Overflow用户
提问于 2015-08-28 19:12:33
回答 5查看 8.4K关注 0票数 5

是否有一个ff探头命令,我可以运行,看看我有一个mov文件是音频的,或包含视频以及?我有各种各样的mov文件,其中一些是音频配音,有些是完整的视频。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-08-29 13:43:30

您可以用JSON或XML输出流信息:

ffprobe -show_streams -print_format json input.mov

您将得到一个具有codec_type属性的流数组,其值为audiovideo等。

票数 6
EN

Stack Overflow用户

发布于 2015-08-29 18:03:01

输出codec_type

代码语言:javascript
复制
ffprobe -loglevel error -show_entries stream=codec_type -of default=nw=1 input.foo

举例结果:

代码语言:javascript
复制
codec_type=video
codec_type=audio

如果您有多个音频或视频流,则输出将显示多个视频或音频条目。

与上述相同,但输出的值仅为

代码语言:javascript
复制
ffprobe -loglevel error -show_entries stream=codec_type -of default=nw=1=nk=1 input.foo

或者:

代码语言:javascript
复制
ffprobe -loglevel error -show_entries stream=codec_type -of csv=p=0 input.foo

举例结果:

代码语言:javascript
复制
video
audio

要包含流索引,请执行以下操作

代码语言:javascript
复制
ffprobe -loglevel error -show_entries stream=index,codec_type -of csv=p=0 input.foo

举例结果:

代码语言:javascript
复制
0,video
1,audio

在本例中,视频是第一流,音频是第二流,这是规范的,但并不总是如此。

如果没有音频,什么也不输出

代码语言:javascript
复制
ffprobe -loglevel error -select_streams a -show_entries stream=codec_type -of csv=p=0 input.foo

使用音频输入的示例结果:

代码语言:javascript
复制
audio

如果输入没有,而不是有音频,那么就不会有输出(空输出),这对于脚本的使用是有用的。

JSON输出示例

代码语言:javascript
复制
ffprobe -loglevel error -show_entries stream=codec_type -of json input.mkv 

举例结果:

代码语言:javascript
复制
{
    "programs": [

    ],
    "streams": [
        {
            "codec_type": "video"
        },
        {
            "codec_type": "audio"
        }
    ]
}

其他输出格式

如果您想要不同的输出格式(ini、平面、紧凑、csv、xml),请参阅FFprobe文档:作者

票数 22
EN

Stack Overflow用户

发布于 2018-07-15 19:44:32

要以编程方式了解视频文件是否有音频,请使用下面所示的avformat_open_input() --如果audio_index更大或等于零,那么视频文件就有音频。

代码语言:javascript
复制
if (avformat_open_input(&pFormatCtx, filename, nullptr, nullptr) != 0) {
    fprintf(stderr, "Couldn't open video file!\n");
    return -1;
}

if (avformat_find_stream_info(pFormatCtx, nullptr) < 0) {
    fprintf(stderr, "Couldn't find stream information!\n");
    return -1;
}

av_dump_format(pFormatCtx, 0, videoState->filename, 0);

for (i = 0; i < pFormatCtx->nb_streams; i++) {

    if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO && video_index < 0)
        video_index = i;

    if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO && audio_index < 0)
        audio_index = i;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32278277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档