オーディオファイルの最後のx秒切り捨て

オーディオファイルの最後のx秒切り捨て

複数のオーディオファイルがあり、各ファイルから最後の1秒を削除する必要があります。オーディオファイルの長さは任意です。

これを行うための最良のツール/方法は何ですか?

私はffmpegにある程度慣れていますが、私が知っている限り、これを行うための直接的なオプションはありません(-ssと-toを使用して開始時間と終了時間を提供する必要があります)。

答え1

バイパス方法を使用する必要があります。ファイルを2回抽出し、2番目の入力のタイムスタンプをトリミングしたい末尾の期間だけオフセットします。次にsetを使用して、2つのストリームを別のffmpegインスタンスにパイプします-shortest。 2番目のffmpegインスタンスでは、2番目の入力のストリームのみが保存されます。

ffmpeg -i in.mp3 -itsoffset 1 -i in.mp3 -map 0:a:0 -map 1:a:0 -c copy -shortest -f nut - | ffmpeg -f nut -i - -c copy -map 0:1 out.mp3

答え2

あなたはそれを使用することができますメディア情報持続時間をミリ秒単位で取得し、持続時間 - 1に切り替えます。

duration=$(mediainfo FILE.mp3 --Inform="Audio;%Duration%")
ffmpeg -to $(($duration / 1000 - 1)) -i FILE.mp3 -c copy FILE_NEW.mp3

答え3

このサイトの他の質問に対する回答に触発され、私も何かを作ることができました。コマンドはオプションfindとして渡すことができます。exec

ffmpeg -i FILE1.wma -ss 0 -to $(echo $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") - 1 | bc) -c copy FILE2.wma

中間部分が$(echo $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") - 1 | bc)必要な期間を最初に取得します。パイプはbcフローティング形式で計算を実行します。その後、その出力はデフォルトの-toコマンドに引数として渡されます。

理解を助けるために、上記の長い一行のコマンドを分析しましょう。

    ffmpeg -i FILE1.wma -ss 0 -to
      $(echo 
        $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") 
        - 1 | bc
        )
    -c copy FILE2.wma

関連情報