shell
脚本是处理这类工作最为简单,快捷的方式。
修改后缀
Show/Hide the code
1
| for file in *.原后缀; do mv "$file" "`echo $file | sed s/.原后缀/.新后缀/`"; done
|
格式转换
heic 转 jpg
首先,安装转换工具。
Show/Hide the code
然后可以使用heif-convert
命令转换。
Show/Hide the code
1
| heif-convert input.heic output.jpg
|
批量转换,命令如下。
Show/Hide the code
1
| for file in *.heic; do heif-convert "$file" ${file/%.heic/.jpg} && rm "$file"; done
|
这条命令的原理是:根据当前文件夹下的.heic
文件生成.jpg
文件,如果成功生成则删除原.heic
文件,如果未成功则不会删除原文件。 此外,如果未能生成.jpg
文件的原因是Input file 'filename.heic' is a JPEG image
,那么可以使用批量修改后缀的方法直接将文件的后缀改为.jpg
。
flac 转 mp3
首先,安装转换工具:
Show/Hide the code
然后可以使用ffmpeg
命令转换,除了格式转换,ffmpeg
还支持很多功能,具体可以查阅文档。
Show/Hide the code
1
| ffmpeg -i 'input.flac' -ab 320k -map_metadata 0 -id3v2_version 3 'output.mp3'
|
批量转换,命令如下:
Show/Hide the code
1
| for file in *.flac; do ffmpeg -i "$file" -ab 320k -map_metadata 0 -id3v2_version 3 ${file/%.flac/.mp3} && rm "$file"; done
|
原理同上。
速度优化
使用for
循环的方式,所有文件排着队一个一个的被ffmpeg
处理。 这种方式固然可以,但效率太低了。 我的运行环境如下:
Show/Hide the code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| -` momo@momo-arch
.o+` --------------
`ooo/ OS: Arch Linux x86_64
`+oooo: Host: 81AC Lenovo ideapad 720S-15IKB
`+oooooo: Kernel: 6.3.6-arch1-1
-+oooooo+: Uptime: 6 hours, 59 mins
`/:-:++oooo+: Packages: 975 (pacman), 8 (flatpak)
`/++++/+++++++: Shell: bash 5.1.16
`/++++++++++++++: Resolution: 1920x1080
`/+++ooooooooooooo/` DE: Plasma 5.27.5
./ooosssso++osssssso+` WM: kwin
.oossssso-````/ossssss+` Theme: [Plasma], Layan-Light-Solid [GTK2/3]
-osssssso. :ssssssso. Icons: Papirus [Plasma], Papirus [GTK2/3]
:osssssss/ osssso+++. Terminal: konsole
/ossssssss/ +ssssooo/- CPU: Intel i5-7300HQ (4) @ 3.500GHz
`/ossssso+/:- -:/+osssso+- GPU: Intel HD Graphics 630
`+sso+:-` `.-/+oso: Memory: 7216MiB / 19554MiB
`++:. `-/+/
.` `/
|
经过测试,处理10
个.flac
文件所需时间为59
秒。 速度慢的原因是目前使用的是单进程串行的处理方式,为了提高速度,可以同时启动多个进程并行处理。
使用终端工具GNU Parallel,命令如下:
Show/Hide the code
1
| ls *.flac | parallel -j4 "ffmpeg -i {} -ab 320k -map_metadata 0 -id3v2_version 3 {.}.mp3 && rm {}"
|
parallel
将从标准输入中读取文件列表,-j
指定了并行进程数,{}
代表输入文件名,{.}
代表没有后缀的输入文件名,其他用法可以man parallel
查看。
经过测试,在同样环境下处理同样的.flac
文件仅需17
秒。