FFProbe获取编解码器

4

我尝试过许多不同的方法来使用FFProbe获取视频的编解码器,其中包括这个,但除了偶尔出现的[/STREAM]之外,我无法得到任何输出。

这是我目前正在尝试的:

$codec = exec("ffprobe -v error -show_entries -show_streams stream=codec_name {$input['filename']}");

我也尝试过这个...

$codec = exec("ffprobe -v quiet -print_format json -show_format -show_streams {$input['filename']}");

我知道这个视频很好,并且在命令行界面上运行良好,因为当我使用以下代码获取时长时,我得到了预期的结果。

$duration = exec("ffprobe {$input['filename']} -show_format 2>&1 | sed -n 's/duration=//p'");

有什么想法吗?
2个回答

11

明白了。

$codec = exec("ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 {$input['filename']}");

echo $codec;

会输出

h264


1

非常感谢timgavin提供的好答案!

我的需求需要一个略微不同的应用程序,我使用了命令提示符:

set probe="<YOUR PATH>/ffmpeg/bin/ffprobe.exe"
%probe% -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 input.avi

在这种情况下,返回的是:

mpeg4

我不确定这是否足以满足我的要求。从我的当前研究来看,HTML5视频标签是一个文档不完善的标准。

感谢@llogan的评论和更多的研究,我决定发布我对视频标签的发现:

ffmpeg/bin/ffmpeg.exe" -i input.avi -b 1500k -vcodec libx264 "output.mp4"

或者

ffmpeg/bin/ffmpeg.exe -i input.mov -vcodec h264 -acodec aac -strict -2 output.mp4

当然,这个:
h264

视频编解码器是唯一被支持的 .mp4 文件类型的编解码器。这个指南可能会有所帮助:https://trac.ffmpeg.org/wiki/Encode/H.264

据我所知,如果使用的浏览器是最新版本,则应该支持这些视频文件类型!

感谢 @llogan 的建议,我们不再需要:

-strict -2

但使用:

-movflags +faststart

我现在拥有的,得益于劳埃德的帮助和研究,是:
string ffmpeg = "Utils/ffmpeg/ffmpeg.exe";
string encode = "-y -i \"" + InputFile + "\" -movflags +faststart -vcodec libx264 -crf 22 -acodec aac -b:a 192k \"" + OutputFile + "\"";

位置: OutputFile 为 OutputFile.mp4

截至:2020年6月12日,这是适用于HTML5视频标签的良好ffmpeg编码。


1
MPEG4是MPEG-4第2部分视频,不受HTML5视频支持。 - llogan
是的,明白了:h264看起来是,但必须是.mp4的Mime类型。 - Rusty Nail
1
除非您的ffmpeg是2015年或更早版本,否则无需使用“-strict -2”。您可以添加“-movflags +faststart”以便更快地开始播放。 - llogan
@llogan 谢谢!我在寻找文档,但没有找到。 - Rusty Nail

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