给定一个媒体文件,运行后ffprobe -i input.mp4 -show_format -print_format json,我得到这样的东西:
{
"format": {
"filename": "ooxx.mp4",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"format_long_name": "QuickTime / MOV",
"start_time": "0.000000",
"duration": "231.210000",
"size": "65133325",
"bit_rate": "2253650",
"probe_score": 100,
"tags": {
"major_brand": "isom",
"minor_version": "512",
"compatible_brands": "isomiso2avc1mp41",
"encoder": "Lavf55.33.100",
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道probe_score在这里意味着什么?如何计算?
我正在尝试在AWS Lambda函数中生成一个同步子进程(运行ffprobe),但它几乎立即(200ms)死于信号SIGSEGV.
我对分段错误的理解是,它是一个尝试访问不允许访问的内存的进程.我尝试将内存增加到1024MB(我使用128MB,因为每次执行仅使用大约56MB),但这并没有改变任何东西.
我知道我不是唯一遇到此问题的人:https://forums.aws.amazon.com/thread.jspa?threadID = 229397
有谁知道如何解决这个问题?
2016年4月25日更新
为清楚起见,我运行的代码是:
import { spawnSync } from 'child_process';
exports.handler = (event, context) => {
process.env.PATH = `${process.env.PATH}:${process.env.LAMBDA_TASK_ROOT}`;
const ffprobe = './ffprobe';
const bucket = event.Records[0].s3.bucket.name;
const key = event.Records[0].s3.object.key;
console.log(`bucket: ${bucket}`);
console.log(`key: ${key}`);
const url = 'http://my-clip-url.com'; // An s3 presigned url.
if (!url) {
throw new Error('Clip does not exist.');
}
const command = `-show_format -show_streams -print_format json ${url}`;
try {
const child = spawnSync(ffprobe, command.split(' '));
console.log(`stdout: ${child.stdout.toString()}`) …Run Code Online (Sandbox Code Playgroud) child-process amazon-web-services node.js ffprobe aws-lambda
我正在使用通过Homebrew安装的libav 9.6.
$ avprobe -version
avprobe version 9.6, Copyright (c) 2007-2013 the Libav developers
built on Jun 8 2013 02:44:19 with Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
avprobe 9.6
libavutil 52. 3. 0 / 52. 3. 0
libavcodec 54. 35. 0 / 54. 35. 0
libavformat 54. 20. 3 / 54. 20. 3
libavdevice 53. 2. 0 / 53. 2. 0
libavfilter 3. 3. 0 / 3. 3. 0
libavresample 1. 0. 1 / 1. 0. 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用重新格式化asjq生成的 JSON 输出的某些元素。我很接近(在我看来),但在细节上遇到了困难:ffprobecsv
我正在 MacOS Mojave (10.14.6) 上运行 jq ( jq --version=> )最近的 d/l 二进制文件jq-1.6
从我的 Mac 终端上,我的结果是:
\n\n$ fn_ffprobeall | jq -r \'[.format.filename,.format.format_name,.format.tags.album_artist] | @csv\'\n"01 Jubilee.flac","flac","Bill Charlap Trio"\n\n# where fn_ffprobeall is a function defined as: \nfn_ffprobeall () { ffprobe -i "01 Jubilee.flac" -hide_banner -v quiet -print_format json -show_format -show_streams; }\nRun Code Online (Sandbox Code Playgroud)\n\n但这个jq输出(如上所示)不是我需要的...我需要不带引号的值""。根据文档--raw-output / -r: …
我一直试图永远解决这个问题(我是编程的新手),我无法弄明白.
我正在尝试构建一个将测试文件的脚本,并为我提供输出,我可以从中获取"音频格式"等信息,然后我可以将其放入文件名中.但是,我甚至无法让脚本返回任何文件信息.插入输入文件时我碰到了墙...
所以在这一点上我只需要帮助让它根据我投入的argv吐出信息.希望我能够弄清楚如何从中解析音频信息.
我的尝试似乎很接近:
#!/usr/bin/python
import os, sys, subprocess, shlex, re
from subprocess import call
def probe_file(filename):
p = subprocess.Popen(['/opt/local/bin/ffprobe', '-show_format', '-pretty', '-loglevel quiet', -i filename], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
print filename
print p.communicate()
[probe_file (f) for f in os.listdir('.') if not f.startswith('.')]
Run Code Online (Sandbox Code Playgroud) 我有一个oog文件(它由来自pbx Asterisk记录的两个audiostreams的sox混合)我正在尝试用ffprobe获取文件信息.当我使用像
cat %filename%.ogg | ffprobe -i -
Run Code Online (Sandbox Code Playgroud)
我收到无效的文件信息(持续时间:N/A,错误的比特率等)当我尝试
ffprobe -i %filename%
Run Code Online (Sandbox Code Playgroud)
一切正常,我得到文件信息.可能有什么不对?文件内容?
我在尝试从特定时间戳的电影文件中提取缩略图时遇到了问题.一般来说,我对此没有任何问题,但是我遇到了一组电影文件,这些文件在请求的字节范围内出现错误(416请求范围不满足).
奇怪的是服务器正在返回部分内容请求中的内容长度,但是当它请求电影文件时,它请求超过该长度的长度.
这有点过头了,所以我不确定这里会发生什么.任何见解都会很棒.
命令:
/usr/bin/ffmpeg -y -ss 1400 -i 'https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4' -qscale:v 2 -f image2 -vframes 1 -filter:v 'scale=192:108' -loglevel debug /data/www/storage/test.jpg 2>&1
Run Code Online (Sandbox Code Playgroud)
错误:
[https @ 0x22e1e00] header='HTTP/1.1 416 Requested Range Not Satisfiable'
[https @ 0x22e1e00] http_code=416
[https @ 0x22e1e00] HTTP error 416 Requested Range Not Satisfiable
Run Code Online (Sandbox Code Playgroud)
源文件大小:
1776706045 bytes
Run Code Online (Sandbox Code Playgroud)
源内容持续时间:
2897.624271
Run Code Online (Sandbox Code Playgroud)
部分内容请求:
[https @ 0x22e1e00] header='HTTP/1.1 206 Partial Content'
[https @ 0x22e1e00] http_code=206
[https @ 0x22e1e00] header='x-amz-id-2: 4J1pgHExIUA0GxIxSBmGJjrRqliHbsIjXeuGzVfTlaaoVXbyZI5FQNma8fGaifcovkXfxJev5yU='
[https @ 0x22e1e00] header='x-amz-request-id: 78B3BDBB0356EF40'
[https @ 0x22e1e00] header='Date: Wed, 16 Dec …Run Code Online (Sandbox Code Playgroud) 我使用以下代码通过ffprobe提取视频信息:
ffprobe -show_streams -of json -v quiet -i input.mp4
Run Code Online (Sandbox Code Playgroud)
所有流的信息都出现在输出中,而我只需要v:0和a:0流的信息。
我知道有-select_streams选择流的选项,但它仅接受一个参数,例如:-select_streams v:0。
我可以使用-select_streams两个参数v:0,a:0也可以使用两次吗?
有人知道将ffmpeg格式值映射到MIME类型和推荐文件扩展名的参考吗?我的谷歌尝试未能发现任何事情.
我手动整理了一个小小的列表,其中包含来自维基百科,IANA和Mozilla开发者网络的猜测和线索,用于我在视频输入测试集合中遇到的格式子集:
ffmpeg Format Extension MIME Type
??????????????????????? ????????? ??????????????????????
asf asf application/vnd.ms-asf
avi avi video/x-msvideo
flv flv video/x-flv
matroska,webm webm video/webm
m4v m4v video/x-m4v
mov,mp4,m4a,3gp,3g2,mj2 mp4 video/mp4
mpeg mpeg video/mpeg
mpegts mpeg video/mpeg
mpegvideo mpeg video/mpeg
ogg ogv video/ogg
matroska mkv video/x-matroska
webm webm video/webm
Run Code Online (Sandbox Code Playgroud)
不过,不知道我是否打出了正确的电话.
(测试文件已经有文件扩展名,但我假设用户上传的文件扩展名无关紧要,并且应该根据ffprobe和智能映射重命名该文件......)
观察-第一部分
我在其他地方看到了运行以下命令的建议,以查看我的.mp4是否有问题。
ffmpeg -v error -i ~/Desktop/5_minute_sync_output_15mn.mp4 -f null - 2>error.log
Run Code Online (Sandbox Code Playgroud)
当我运行上面的命令时,在下面显示的行上看到了很多日志。
应用程序向流0中的复用器提供了无效的,非单调递增的dts:15635> = 15635
通过大量的搜索和阅读,我了解到解码时间戳不是按顺序排列的。
观察-第二部分
但是,使用以下命令和一些后期处理检查相同mp4的帧时,我没有看到pkt_dtsframes_info json中的视频或音频流出现故障。
ffprobe -loglevel panic -of json -show_frames ~/Desktop/5_minute_sync_output_15mn.mp4
Run Code Online (Sandbox Code Playgroud)
这使我怀疑我对“ 观察-一部分-我”的初步理解
这2件事无关吗?任何帮助,将不胜感激。