initial commit
This commit is contained in:
commit
e88a2dde6e
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
*~
|
||||
.DS_Store
|
||||
*.pkg.tar.zst
|
||||
*.pkg.tar.zst.sig
|
20
PKGBUILD
Normal file
20
PKGBUILD
Normal file
@ -0,0 +1,20 @@
|
||||
# Maintainer: Sebastian Hugentobler <shu@vanwa.ch>
|
||||
|
||||
pkgname=split-audacity-labels
|
||||
pkgver=0.1.0
|
||||
pkgrel=1
|
||||
pkgdesc="Split an audio file along exported audacity labels."
|
||||
arch=("any")
|
||||
url="https://code.vanwa.ch"
|
||||
license=('MIT')
|
||||
depends=("ffmpeg" "python3")
|
||||
source=(
|
||||
"split-audacity-labels"
|
||||
)
|
||||
sha256sums=("afd19f69358908cdbf2cd6048567ed32cd27ae22da1a69962eb6a5d7e30d84bb")
|
||||
|
||||
package() {
|
||||
cd "$srcdir/"
|
||||
|
||||
install -Dm 755 split-audacity-labels "$pkgdir/usr/bin/split-audacity-labels"
|
||||
}
|
51
split-audacity-labels
Executable file
51
split-audacity-labels
Executable file
@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
"""split a music track into specified sub-tracks by calling ffmpeg from the shell"""
|
||||
|
||||
# check command line for original file and track list file
|
||||
if len(sys.argv) != 3:
|
||||
print("usage: split <original_track> <track_list>")
|
||||
exit(1)
|
||||
|
||||
# record command line args
|
||||
original_track = sys.argv[1]
|
||||
track_list = sys.argv[2]
|
||||
|
||||
# create a template of the ffmpeg call in advance
|
||||
cmd_string = 'ffmpeg -i "{tr}" -acodec copy -ss {st} -to {en} "{nm}.m4a"'
|
||||
cmd_end_string = 'ffmpeg -i "{tr}" -acodec copy -ss {st} "{nm}.m4a"'
|
||||
|
||||
# read each line of the track list and split into start, end, name
|
||||
lines = []
|
||||
with open(track_list, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
for idx, line in enumerate(lines):
|
||||
next_line = None if idx + 1 == len(lines) else lines[idx + 1]
|
||||
|
||||
# skip comment and empty lines
|
||||
if line.startswith("#") or len(line) <= 1:
|
||||
continue
|
||||
|
||||
# create command string for a given track
|
||||
_, start, name = line.strip().split("\t")
|
||||
name = "{nr:0>2d} {nm}".format(nr=idx + 1, nm=name)
|
||||
|
||||
command = None
|
||||
if next_line is not None:
|
||||
end, _, _ = next_line.strip().split("\t")
|
||||
command = cmd_string.format(tr=original_track, st=start, en=end, nm=name)
|
||||
else:
|
||||
command = cmd_end_string.format(tr=original_track, st=start, nm=name)
|
||||
|
||||
# use subprocess to execute the command in the shell
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user