如何将一堆m4a文件拆分为多个块,并用ffmpeg替换它们的元数据?

时间:2018-11-28 00:05:32

标签: bash ffmpeg batch-processing

我通读了很多部分解决了我的问题的线程,并试图编写一个脚本,该脚本将.m4a音频文件分为多个部分并替换其元数据。

我没能一口气做到这一点(也许你可以告诉我怎么做),但是这两个脚本非常接近。 (出于可读性和调试目的,我将它们分为两部分。)

#!/bin/bash
# cutaudio.sh

input=$1
output=$2
duration=$3

ffmpeg -i $input -map 0 -f segment -segment_time $duration -c copy "$output-%03d.m4a"

上面的脚本可以正常工作,并将文件分成提供的长度的块。

#! /bin/bash
# stripmetadata.sh


input=$1

n="1"
for i in $input*; do 
    title="Part $n"
    ffmpeg -i $i -map 0 -metadata title="$title" -c copy -y "$i"
    n=$((n + 1))
done

此脚本实际上设法替换了元数据中的标题,但是文件也被剥离到第一秒。在第二个脚本之后,它们的大小均为33,7 kb。我对ffmpeg还是陌生的,所以将不胜感激!

编辑: 这是针对任何感兴趣的人的结果脚本: https://github.com/adrifromhh/cutaudio 我用它来剪切下载的有声读物(从youtube或从Audible录制)的可用部分。

1 个答案:

答案 0 :(得分:0)

要扩展oguzismail的注释,您应该先写入一个临时文件,然后再覆盖原始块文件,例如

for i in $input*; do title="Part $n" ffmpeg -i $i -map 0 -metadata title="$title" -c copy -y /tmp/tmp.m4a mv -f /tmp/tmp.m4a "$i" n=$((n + 1)) done