我有以下.m4a 文件ffprobe
(在 Debian 12.1 上)报告:
Stream #0:1[0x2](eng): Data: bin_data (text / 0x74786574), 0 kb/s
Metadata:
handler_name : SubtitleHandler
Unsupported codec with id 98314 for input stream 1
这些是歌词吗?如果是,我该如何将它们提取为纯文本?
我有以下.m4a 文件ffprobe
(在 Debian 12.1 上)报告:
Stream #0:1[0x2](eng): Data: bin_data (text / 0x74786574), 0 kb/s
Metadata:
handler_name : SubtitleHandler
Unsupported codec with id 98314 for input stream 1
这些是歌词吗?如果是,我该如何将它们提取为纯文本?
我正在尝试使用 shell 脚本识别音频收藏中具有高/低比特率的文件。做起来file test.mp3
非常快:
$time file test.mp3
test.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, Stereo
real 0m0.027s
但是,file
不显示 .m4a 文件的比特率:
$time file test.m4a
test.m4a: ISO Media, Apple iTunes ALAC/AAC-LC (.M4A) Audio
real 0m0.056s
我尝试使用exiftool
and ffprobe
,但它们似乎至少慢了 10 倍:
$time exiftool test.m4a
Avg Bitrate : 131 kbps
real 0m0.532s
$time ffprobe test.m4a
Stream #0:0[0x1](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 130 kb/s (default)
real 0m0.621s
这大约只有 100 个文件/分钟,相当慢。有没有更快的方法来查找 m4a 文件的比特率?据我了解,ffprobe
检查流数据而不是标签,因此它比file
. 只要速度快,我就可以接受不太精确的比特率值。
我最近意识到file
在 Debian Bullseye 上无法识别我正在处理的一些文件格式,告诉我它们只是 ZIP 文件:
user@host:~ $ file file.docx # Correct, not a regular ZIP file
file.docx: Microsoft Word 2007+
user@host:~ $ file file.key # Incorrect, also not a regular ZIP file
file.key: Zip archive data, at least v2.0 to extract
但是,如果我查看带有 的文件pcmanfm
,我会看到文件类型被正确识别:
"file.docx" (50.5kB) Word 2007 document
"file.key" (10.4MB) Apple Keynote 5 presentation
是否可以告诉file
使用与使用相同的魔术文件pcmanfm
,或者以某种方式更新默认值/etc/magic
以file
了解流行的文档格式?
的手册页setlocale
似乎说语言代码和字符编码名称足以设置适当的语言环境:
语言环境名称通常采用语言[_territory][.codeset][@modifier] 形式,其中语言是 ISO 639 语言代码,地区是 ISO 3166 国家代码,代码集是字符集或编码标识符,如 ISO- 8859-1 或 UTF-8。
但是,一个快速测试表明,只有语言环境名称的“修饰符”部分是可选的:
void tryLocale(const char * locid)
{
char * result = std::setlocale(LC_CTYPE, locid);
std::cout << locid << " = " << (result ? result : "fail") << std::endl;
}
int main()
{
tryLocale("de"); // de = fail
tryLocale("de_DE"); // de_DE = fail
tryLocale("de_DE.CP1252"); // de_DE.CP1252 = de_DE.CP1252
tryLocale("de.CP1252"); // de.CP1252 = fail
tryLocale(".CP1252"); // .CP1252 = fail
}
我的问题是我只知道所需的编码名称(例如ISO-8859-1
),我可能会想出语言代码(例如en
)。我不知道如何找到一个合适的国家名称(例如US
),而且我对一个国家也不感兴趣:我只希望tolower
我的应用程序中的功能使用正确的代码页。
我刚刚注意到有关如何sudo
处理.Xauthority
文件的一些特殊情况:
sudo xauth add $(xauth list | tail -1)
user@server: sudo xauth info
Authority file: /root/.xauthYZ21Nt
File new: no
File locked: no
Number of entries: 1
Changes honored: yes
Changes made: no
Current input: (argv):1
user@server: sudo xauth info
Authority file: /root/.xauth3BFy5d
File new: no
File locked: no
Number of entries: 1
Changes honored: yes
Changes made: no
Current input: (argv):1
user@server: sudo xauth list
server/unix:10 MIT-MAGIC-COOKIE-1 c922ab48defdf43b1092dffb86c06eed
user@server: sudo ls -la /root | grep auth
-rw-r--r-- 1 root root 0 Nov 9 14:40 .Xauthority
-rw------- 1 root root 57 Nov 9 15:23 .xauthsrxzxl
user@server: pkexec xauth info
Authority file: /root/.Xauthority
File new: no
File locked: no
Number of entries: 0
Changes honored: yes
Changes made: no
Current input: (argv):1
因此,$XAUTHORITY
每个 new 的 value 都是不同的sudo
,它指向一个临时文件,该文件在sudo
退出时会消失。正因为如此,最后一个命令(它使用pkexec
而不是sudo
并期望它在 中/root/.Xauthority
)无法看到 cookie。例如,sudo gedit
运行良好,但pkexec env DISPLAY=$DISPLAY gedit
失败。
为什么要以如此复杂的方式完成,数据存储在哪里,更重要的是,我如何访问.Xauthority
数据pkexec
?