小编Dan*_*der的帖子

MPEG ADTS MP3 到普通 MP3 的无损转换

我有很多 ADTS 编码的 MP3 音频文件。不幸的是,我的汽车收音机不支持 ADTS,所以我需要将它们转换为没有传输流的普通 MP3 文件。

有很多人问过同样的问题,但我找到的唯一答案是转换为 wav,然后再将lameenc其转换回 MP3。

我确信有一种方法可以在不解码/重新编码的情况下转换这些文件。

我已经尝试过ffmpeg/ avconv,但该参数-acodec copy似乎没有输出与 ADTS 不同的任何内容。

我也玩过 GStreamer。有趣的是,我认为是模块 aacparse 至少理解格式,但它不是多路复用器。

我可以使用哪种工具?

$ file badfile.mp3 goodfile.mp3
badfile.mp3:  MPEG ADTS, layer III, v2,  64 kbps, 22.05 kHz, JntStereo
goodfile.mp3: Audio file with ID3 version 2.4.0
Run Code Online (Sandbox Code Playgroud)

可以在此处找到示例文件(概述

更新: 我仍在测试,但似乎 1) 还跛脚产生 ADTS 文件和 2) ADTS 并不是我的汽车收音机的真正问题,它必须有所不同。我现在正在使用不同的配置文件和比特率、VBR 和 CBR 进行测试。但是如果有人对 ADTS 有更多了解,这仍然很有帮助。

mp3

6
推荐指数
1
解决办法
2482
查看次数

导出选择正确转义的环境变量

我想将我在破折号脚本中设置的一些环境变量导出到一个文件中:

myvariable="line 1

LINE=3
some characters: # \" \$
line 5"
myvariable2="abc"
export myvariable myvariable2
Run Code Online (Sandbox Code Playgroud)

预期结果(可用脚本):

declare -x myvariable="line 1

LINE=3
some characters: # \" \$
line 5"
declare -x myvariable2="abc"
Run Code Online (Sandbox Code Playgroud)

结果就是我使用export命令得到的结果。但它导出所有 envvars 并且不允许过滤。由于变量的多行字符,grep结果是不可能的。

相比之下,该printenv命令只允许输出选择的变量,但它不关心转义,并且在此用例中不输出变量名称。

shell bash dash environment-variables

6
推荐指数
1
解决办法
1721
查看次数

检测 btrfs 重新链接的文件

很明显,cp --reflink foo bar我可以在 btrfs 上复制文件而不会浪费空间。但是我如何检测这两个文件(此处为 foo 和 bar)使用相同的“空间单位”?

如果它们是硬链接,我将用于[ foo -ef bar ]比较或stat -c%i foo获取唯一的 id(在本例中为索引节点)。

btrfs reflinked 文件是否有类似的命令?

我想将其应用到 300G 卷上,由于重复数据删除,该卷的大小实际上为 6T,所以我想避免校验和......

btrfs reflink

6
推荐指数
1
解决办法
1358
查看次数

创建小 ubifs 卷时的开销大得惊人

在具有 39 个擦除块 (= 4.9 MiB) 的 mtd 分区上,我尝试格式化 ubifs。当保留块减少到最小可能的 1 块时(我知道这不好),生成的文件系统具有 2.2M 未压缩数据的可用空间。这意味着只有 45% 的空间可用于数据。

使用 jffs2 格式化的同一区域允许我写入 4.6 MB 的数据,这是 ubifs 设置中大小的 93% 或两倍以上。

问题是我无法使用 jffs2,因为我的 64 字节 OOB 大小没有为 BCH8 和 JFFS2 OBB 数据提供足够的空间,如TI 警告中所述。

我已阅读常见问题解答章节 为什么我的 UBIFS 卷的容量明显低于同等 JFFS2 卷的容量? 为什么 df 报告可用空间太少? 但我还是不敢相信开销这么大。

我可以做些什么来增加我的(可写)ubifs 卷的可用空间吗?

合并 ubi0 和 ubi1 时是否节省空间?(超过保留块?)

这是我的设置:

$ mtdinfo -a

mtd10
Name:                           NAND.userdata
Type:                           nand
Eraseblock size:                131072 bytes, 128.0 KiB
Amount of eraseblocks:          39 (5111808 bytes, 4.9 MiB) …
Run Code Online (Sandbox Code Playgroud)

filesystems embedded ubifs

5
推荐指数
1
解决办法
3982
查看次数

脚本中字符串的独立于外壳的转义

我只是(再次)为此而挣扎:

# only in bash
NORM=$'\033[0m'
NORM=$'\e[0m'

# only in dash
NORM='\033[0m'

# only in bash and busybox
NORM=$(echo -en '\033[0m')
Run Code Online (Sandbox Code Playgroud)

目标是在字符串中包含特殊字符,不仅用于输出使用echo,还用于管道到 cli 工具等。

在上面的特定用例中,使用$(tput ...)可能是最好的方法,但我要求一个通用的转义解决方案,对外部工具的要求最低,但兼容性最高。

通常,我会使用类似[ -z "$BASH_VERSION" ]但的条件帮助自己

  1. 我还没有找到检测busybox的简单方法
  2. 5 行中的正常变量赋值(使用 if/else/fi)看起来有点矫枉过正
  3. 我更喜欢简单的解决方案

shell quoting escape-characters

3
推荐指数
1
解决办法
364
查看次数

在 bash 中以交互方式逐行添加参数

有时,我在剪贴板中有一个文件或字符串列表,并希望将其作为参数列表粘贴到 bash shell 中:

示例文件列表(仅为示例):

createsnapshot.sh
directorylisting.sh
fetchfile.sh
Run Code Online (Sandbox Code Playgroud)

我想要的是:

md5sum createsnapshot.sh directorylisting.sh fetchfile.sh
Run Code Online (Sandbox Code Playgroud)

目前,我输入以下 hacky 命令行(文件名是从剪贴板粘贴的;列表可以包含数十行):

md5sum $(echo $(echo "
createsnapshot.sh
directorylisting.sh
fetchfile.sh
"))
Run Code Online (Sandbox Code Playgroud)

这有几个缺点:

  • 这很复杂
  • 它看起来不太好
  • 它不支持包含空格的行

我还有什么其他选择?md5sum "不起作用,因为在这种情况下,我只得到一个带有多行字符串的参数。类似于here-documents。

并非总是如此md5sum。它也可以是tarorgit adddu -hsc。我不只是要求一种方法来获取这些文件的 md5 校验和。这种情况每天大约发生 2-5 次。

command-line shell bash clipboard

2
推荐指数
1
解决办法
684
查看次数