bash - 如何将一堆 m4a 文件拆分成 block 并用 ffmpeg 替换它们的元数据?

标签 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"

上面的脚本工作正常,并将文件分成提供长度的 block 。
#! /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 录制的)剪切成可用部分。

最佳答案

要扩展 oguzismail 的评论,您应该写入一个临时文件,然后覆盖原始 block 文件,例如,
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

关于bash - 如何将一堆 m4a 文件拆分成 block 并用 ffmpeg 替换它们的元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53510127/

相关文章:

java - "ASCII"上下左右箭头代码

ffmpeg - Watson 语音转文本 : Narrowband producing better results than Broadband?

audio - FFMPEG - 在编码后获取精确计算的音频文件大小

c - gcc "relocation R_X86_64_PC32 against symbol ` ff_M24A'"在 linux 上静态链接 ffmpeg 时出错

java - 什么是 Python 的 Celery 项目的 Java 等价物?

linux - 如何递归列出具有大小和最后修改时间的文件?

bash - 将前缀 key 发送到 tmux session

linux - 用于解析命令输出的 Bash 脚本

MATLAB:批量导入一个非常大的文件

c# - 为什么要批量发送电子邮件而不是单独发送?