Ffmpeg

使用 FFmpeg 自動將大型 mp3 文件拆分為文本文件中提供的不同時間點的多個文件

  • August 1, 2021

我有一個很大的 mp3 文件;我想在不同的時間點將其拆分為 480 個 mp3 文件。我想知道除了一個一個拆分之外,是否有一種簡單的方法可以做到這一點。我可以在文本文件中提供不同的拆分時間,然後在 FFmpeg 中執行一個命令嗎?

使用這個腳本

#! /bin/bash
x="00:00:00"
z=0
filename=$(basename -- "$2")
ext="${filename##*.}"
filename="${filename%.*}"
initcmd="ffmpeg  -nostdin -hide_banner -loglevel error -i $2"
while read y
do
initcmd+=" -ss $x -to $y -c copy $filename$z.$ext"
let "z=z+1"
x=$y 
done < $1
$initcmd

使其可執行chmod +x

並使您的時間配置文件像這樣,時間戳用空格分隔。

00:02:30 
00:05:40

記得在最後一次輸入後按輸入鍵。

然後語法是

./splitter.sh ./time ./Big_Buck_Bunny.mp4

它將產生兩個文件1.mp42.mp4第一個是從 00:00:00 到 00:02:30,第二個是從 00:02:30 到 00:05:40。如果要在輸出中保留文件,請執行此命令

ffprobe -v error -show_entries format=duration -sexagesimal -of default=noprint_wrappers=1:nokey=1 Big_Buck_Bunny.mp4 >> ./time

(這會獲取文件的長度並添加到您的時間配置中)

解釋

第 2 行:設置初始開始時間

第 3 行:設置輸出文件名編號

第 4、5 和 6 行:設置副檔名(來自SO 文章

第 7 行:帶有初始參數的字元串

while 循環:逐行讀取(來自SO

行ffmpeg:-nostdin停止 ffmpeg 吃第一個字元

-hide_banner -loglevel panic抑制 ffmpeg 消息

-i設置輸入文件名

Line initcmd+=:添加輸出名稱和參數 -ssstart time -toend time -c copy使用相同的編解碼器作為輸入,沒有質量損失並且最快。

第 10 行:增加文件名編號(來自AskUbuntu Post)

第 11 行:設置新起點

編輯:

  1. 現在它可以讀取行分隔文件。所以
  2. 不要重複呼叫ffmpeg,而是在最後一行使用多個輸出做所有事情

引用自:https://unix.stackexchange.com/questions/659789