本文用于收集我记不住的实用的命令行用法。

docker

1
2
3
# 启动已停止的容器
docker start f357e2faab77 # restart it in the background
docker attach f357e2faab77 # reattach the terminal & stdin

docker - I lose my data when the container exits - Stack Overflow

下载视频和音频

1
2
3
4
5
# 下载视频
you-get https://www.iqiyi.com/v_m72044yl88.html
yt-dlp https://www.youtube.com/watch\?v\=9gfECJHQElo
# 下载 Youtube 歌单(最佳质量、附上序号)
yt-dlp --output '%(playlist_index)s-%(title)s.%(ext)s' -f 'bestaudio' 'https://www.youtube.com/watch?v=T4SimnaiktU&list=PLfAuqOtSFlrAwfk6j3PlSXhssBXzcXREw'

批量转换媒体格式

1
2
# 把当前文件夹的所有 .webm 文件转换为 .mp3
for i in *.webm; do ffmpeg -i "$i" "${i%.*}.mp3"; done

去广告看视频

1
you-get -p vlc https://www.iqiyi.com/v_m72044yl88.html

转换图片格式

先安装 ImageMagick

1
sudo apt install imagemagick

把 jpg 图片转换为 png 图片:

1
convert input.jpg output.png

合成音频文件

SoXMp3Wrap 都可以用来合成 MP3。他们的区别如下(测试文件大小为 3.7 MB 和 4.4 MB)1

SoX Mp3Wrap
速度 10.5 秒 瞬间
还原文件
正常播放(Elisa、VLC、mpv) 只有 mpv 可以正常播放,其他播放器播放听起来不太对劲
输出文件/源文件 97.7% 100.006%

SoX

安装 SoX

1
sudo apt-get install sox libsox-fmt-mp3

input-1.mp3input-2.mp3 合成为 output.mp3

1
sox input-1.mp3 input-2.mp3 output.mp3

注意,要按顺序输入待合成的 MP3,把输出文件写在最后。

Mp3Wrap

安装:

1
sudo apt install mp3wrap mp3splt

input-1.mp3input-2.mp3 合成为 output.mp3

1
mp3wrap output.mp3 input-1.mp3 input-2.mp3

注意,这次是先写输出文件,再写输入文件。输出的文件会加上后缀 MP3WRAP,所以生成的输出文件名为 output_MP3WRAP.mp3。这个后缀用于提醒用户文件是 Mp3Wrap 生成的,可以用 Mp3splt 还原:

1
2
mp3splt -w output_MP3WRAP.mp3
# -w Warp Mode,用于拆分由 Mp3Wrap 和 AlbumWrap 生成的文件

上述命令会把 output_MP3WRAP.mp3 还原成原来的 input-1.mp3input-2.mp3(不会删除 output_MP3WRAP.mp3)。还原出来的文件和原文件是一模一样的。

拆分音频文件

把 MP3 拆分多个文件,每份 30 秒:

1
ffmpeg -i input.mp3 -f segment -segment_time 30 -c copy out%03d.mp3

剪辑视频

剪取 input.mp4 06:01.511 至 06:23.841 的内容,并保存为 output.mp4

1
ffmpeg -ss 06:01.511 -to 06:23.841 -i input.mp4 -c copy output.mp4

选项含义:

  • -ssset the start time)指定视频开始时间
  • -to 指定结束时间
  • -i (input)指定输入文件
  • -c copy 表示使用相同编码方式(速度更快)
  • output.mp4 是输出文件名

这些选项一定要按照顺序写,不然剪出来的视频时间不对。

我试过把 -i 先写在前面,也就是这样:

1
ffmpeg -i input.mp4 -ss 06:01.511 -to 06:23.841 -c copy output.mp4

结果输出视频开头的时间总是不对,然后整了两小时都不知道咋回事。遇到 ffmpeg 以前,我都不知道命令行软件的选项位置会影响结果。啊!多么痛的领悟!如果把 -c copy 选项也去掉的话,输出视频又正确了,真是搞不懂啊。

1
ffmpeg -i input.mp4 -ss 06:01.511 -to 06:23.841 output.mp4

视频遮罩

在 1080P 的视频底部加上 100 像素高的黑色长方形遮罩。文档:https://ffmpeg.org/ffmpeg-filters.html#drawbox

1
ffmpeg -i input.mp4 -vf "drawbox=x=0:y=(ih-100):w=iw:h=100:color=black:t=fill" output.mp4

输出好看的 PATH 变量

如果直接用 echo $PATH 查看 PATH 变量,结果很难看,很难分清楚哪个目录是哪个。

1
2
$ echo $PATH
/home/user/bin:/home/user/.local/bin:/home/user/bin:/home/user/.local/bin:/home/user/bin:/home/user/.local/bin:/home/user/bin:/home/user/.local/bin:/home/user/miniconda3/condabin:/home/user/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

tr ':' '\n' <<< "$PATH",结果一目了然。<<< 把右边的 $PATH 传递到左边,tr ':' '\n'$PATH 中的 : 转换为换行符。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$ tr ':' '\n' <<< "$PATH"
/home/user/bin
/home/user/.local/bin
/home/user/bin
/home/user/.local/bin
/home/user/bin
/home/user/.local/bin
/home/user/bin
/home/user/.local/bin
/home/user/miniconda3/condabin
/home/user/bin
/home/user/.local/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin

参考:shell - Show PATH in a human-readable way - Unix & Linux Stack Exchange

KDE Plasma

1
2
3
4
# 重启 Plasma
kquitapp5 plasmashell; sleep 2; kstart5 plasmashell
# 重新加载软件列表
kbuildsycoca5

参考:kwin - Can I restart the KDE Plasma Desktop without logging out? - Ask Ubuntu

设置华为笔记本充电阈值(charge threshold)

1
echo "40 70" | sudo tee /sys/devices/platform/huawei-wmi/charge_control_thresholds

  1. 测试文件为紅蓮華(input-1.mp3,3.7 MB)和 from the edge (input-2.mp3,4.4 MB),播放器为 Elisa、VLC、mpv。 ↩︎