ffmpeg - 如何(以编程方式)检查文件是否具有DRM保护?


1

我有一个应用程序将ffmpeg / ffprobe作为子进程运行(类似于在命令行上运行),然后解析命令输出以检索有关文件的元数据和/或执行文件的转码。和 我的应用程序需要知道给定文件是否受DRM保护

注意 - 我看过了 这个问题 。它没有解决输出的编程解析以确定DRM保护。它只涉及人类解析输出。

我已经知道我可以运行ffprobe了,如果我用眼睛扫描输出并看到类似“检测到DRM保护......解码可能会失败”的输出,我知道该文件受到保护。请参阅此示例输出:

ffprobe -hide_banner CelticWoman-OnlyAWomansHeart.wma

[asf @ 0x7f9bab000000] DRM protected stream detected, decoding will likely fail!
Input #0, asf, from 'CelticWoman-OnlyAWomansHeart.wma':
Metadata:
...

但是,上述输出存在两个问题:

1 - 是的 不适合机器 。我必须扫描一大堆输出来寻找几个字。解析这样的输出是低效的,因为它用于人类消费,而不是机器消耗。

2 - 我不知道上面的输出是否在不同的文件类型中是一致的。换句话说,上面的示例输出是针对ASF容器中的WMA文件。如果这是FLAC或DTS或其他类型的文件怎么办?使用的措辞是否相同,以便我的应用程序每次都可以解析并检测它?

我需要的是我的应用程序可以使用的某种输出属性 可靠且可预测地解析 ...一些键值对,例如“drm-protected = true”,它在媒体文件类型中是一致的

那么,ffprobe / ffmpeg上的哪些选项会给我一个机器可解析的键值对,告诉我文件是否有DRM保护?

太感谢了 !


DRM是一个非常广泛的术语 - 在ffmpeg中没有单一的机制来检测它是否存在。您找到的字符串仅对ASF解码有效。在您的使用案例中,您是否只谈论音频?
slhck

是的,只有音频。嗯。。好。
waldenCalms

我想真正的问题是:为什么你的应用需要知道这个,以及你将处理什么类型的文件(容器,编解码器)?也就是说,我不确定是否真的有这么多DRM格式的音频浮动。可能是iTunes(AAC / MP4),PlayReady(WMA / ASF),......
slhck

我的应用程序是一个音频播放器,无法处理DRM文件,因此如果检测到DRM,它将只是通知用户它无法播放。我注意到即使文件受到保护,ffmpeg转码实际上似乎成功(零退出代码),所以我不能总是依赖转码过程退出代码来检测错误,所以我需要一些其他的方法。否则,ffmpeg将生成一个空文件(几KB),该文件实际上在轨道持续时间内保持静音。这对于音频播放器来说不是理想的用户体验。我需要检测DRM保护,以便告诉用户“抱歉”。
waldenCalms
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.