如何在 Ubuntu Linux 上查找受 DRM 保护的 WMA 文件

如何在 Ubuntu Linux 上查找受 DRM 保护的 WMA 文件

在我的乌班图 Linux 18.04我有一大堆 WMA 文件(不要问),这些文件与另一台受 DRM 保护的计算机上的几个文件混合在一起。后者无法播放,甚至使某些播放器软件崩溃。

是否有一种快速简便的方法可以递归整个子目录树并检测哪些 WMA 文件受 DRM 保护?我见过基于 Windows XP 和 Powershell 的解决方案,但没有看到针对 *ix 的解决方案。

请注意,我并不是在寻找一种(法律上可疑的)方法来剥离 DRM 保护;我只是在寻找一种方法。我只需要找出哪些受 DRM 保护,而不需要一一尝试,这样我就可以删除它们。

建议停止使用 WMA 并改用更合理的格式是没有必要的;如果可以的话,我从不使用 WMA。然而,为我付饭票的人要求我支持这个[审查],所以我别无选择。

答案1

是否有一种快速简便的方法可以递归整个子目录树并检测哪些 WMA 文件受 DRM 保护?

当然!您需要提供任何类型的程序来检测文件是否受 DRM 保护。递归部分很简单。您可能正在使用bash,因此此脚本会递归、检查、打印经过 DRM 处理的文件;如果您将其替换echorm.

# to make bash understand **; ZSH doesn't need this
shopt -s globstar
shopt -s nocaseglob
for candidate in **/**.wma ; do 
  magic_command_that_fails_with_drm "${candidate}" || echo "${candidate}"
done

如果您碰巧有一个命令行程序可以可靠地与这些文件一起崩溃,那么,它可以作为magic_command_that_fails_with_drm.否则,请尝试mplayer -really-quiet -vo null -ao pcm:fast:file=...

#!/bin/bash
# to make bash understand **; ZSH doesn't need this
shopt -s globstar
shopt -s nocaseglob

for candidate in **/**.wma ; do 
  tmpfile=$(mktemp)
  mplayer -really-quiet -vo null -ao "pcm:fast:file=${tmpfile}" "${candidate}" 2> /dev/null
  # check whether file exists and is non-empty
  if [ ! -s "${tmpfile}" ]; then
    echo "${candidate}"
  fi
  # delete the PCM file again.
  rm "${tmpfile}"
done

答案2

您可以使用ffprobe(随 一起提供ffmpeg) 和grep作为字符串“DRM”:

find . -iname "*.wma" \
| while read -r f; do
    ffprobe "$f" 2>&1 | grep -q ' DRM' && echo "$f";
  done

或者与单行代码相同:

find . -iname "*.wma" | while read -r f; do ffprobe "$f" 2>&1 | grep -q ' DRM' && echo "$f"; done

相关内容