ffprobe - 从管道中获取文件信息

12
我有一个oog文件(它是由pbx Asterisk录制的两个音频流通过sox混合而成),我正在尝试使用ffprobe获取文件信息。当我使用类似以下的命令时:
cat %filename%.ogg | ffprobe -i - 
我收到了无效的文件信息(时长:N/A,比特率错误等),当我尝试时。
ffprobe -i %filename%

一切正常,我可以得到文件信息。可能出了什么问题?是文件内容的问题吗?


7
我知道现在已经过去4年了,但最近我尝试做类似的事情时发现你是无法这样做的。大多数格式需要读取整个文件才能确定持续时间,这就是指定直接的文件名能够正常工作的原因,因为它有访问权限 - ffprobe需要进行更改!非常烦人!你可以使用ffmpeg做一些事情,但这意味着需要读取整个文件:ffmpeg -i pipe:0 -f null /dev/null < inputfile.mp4 - Rich
我刚遇到了这个问题。为什么他们关闭了有关 ffmpeg 的工单? - Leo
3个回答

4

简单说明一下,将输入内容导入ffprobe看起来可以正常工作。使用连字符替换输入文件,然后你就可以开始工作了。下面是我系统中一个随机视频文件的示例:

cat 01.mp4 | ffprobe -show_format -pretty -loglevel quiet -

返回值:

[FORMAT]
filename=pipe:
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=N/A
duration=0:02:56.400000
size=N/A
bit_rate=N/A
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2mp41
TAG:creation_time=1970-01-01T00:00:00.000000Z
TAG:title=yy.mp4
TAG:encoder=Lavf52.78.3
[/FORMAT]

1
如果输入是管道,则“bit_rate”不存在;如果输入是文件,则存在。“您对此有何想法?” - remort

3

从ffprobe 1.0.7版本开始,您甚至可以获得JSON格式的输出:

ffprobe -v quiet -print_format json -show_format Ramp\ -\ Apathy.mp3

这将产生以下输出:

{
    "format": {
        "filename": "Ramp - Apathy.mp3",
        "nb_streams": 2,
        "format_name": "mp3",
        "format_long_name": "MP2/3 (MPEG audio layer 2/3)",
        "start_time": "0.000000",
        "duration": "203.638856",
        "size": "4072777",
        "bit_rate": "159999",
        "tags": {
            "title": "Apathy",
            "artist": "Ramp",
            "album": "Evolution Devolution Revolution",
            "date": "1999",
            "genre": "Metal"
        }
    }
}

我认为你可以使用cat获取探针,你是否有任何对cat文件内容的要求?如果没有,请直接使用ffprobe而不要使用cat。


14
他明确要求来自管道的输入,而不是文件!谢谢,但这是无用的,他说他已经使用文件输入得到了持续时间... - Rich
1
这是另一个问题的答案。问题:“如何从管道中读取”,答案:“您可以使用JSON格式”,很奇怪,不是吗?我已经检查了编辑历史记录 - 问题没有改变。(https://stackoverflow.com/posts/13763047/revisions) - maxkoryukov
我无法使用stdout 1>或stderr 2>将格式良好的json发送到另一个文件。-o output.file.json被拒绝为未知选项。有什么想法吗? - HiTechHiTouch

0

而且你可以通过curl从远程站点进行管道传输

curl  --silent --header "Range: bytes=0-51200" https://example.com/your.mp4 | ffprobe -v quiet -show_format -of flat=s=_ -show_entries stream=height,width,nb_frames,duration,codec_name -

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接