Skip to main content

動画から音声を抽出(チャプター毎に分割)

やりたいこと

  • 動画ファイル(mkv) をもとに、音声ファイルを抜き出すこと
  • iTunes/Walkman に取り込めるよう mp3 タグを適切につけること

前提

  • mkv ファイルが手元にあること
  • シェルスクリプト読み書き出来ること(または見れば分かること)
  • 順番に打てば良い訳でないので適宜改変できること
  • mac で、必要なもの (ffmpeg, mkvmerge) は brew でインストールできること (どの順で入れたか忘れちゃったから)
  • そしてもちろん、著作権的に問題のないコンテンツであること

概要

  1. mkvmerge で トラック毎に分割
  2. ffmpeg で音声ファイル(m4a) に変換 + mp4tags でタグ付け

手順1. 1チャプタ1ファイルにしたい場合

bash
# 1. mkv ファイルから音声のみ抽出 ( -vn が映像なし オプション )
ffmpeg -i tmp.mkv -vn -acodec copy tmp.audio.mkv

# 2. Chapter 毎に分割
mkdir split-movie-mkv
mkdir split-audio-mkv
# mkvmerge -o split-movie-mkv/tmp.split.mkv --split chapters:all tmp.mkv # 映像ありの場合
mkvmerge -o split-audio-mkv/tmp.audio.split.mkv --split chapters:all tmp.audio.mkv

# → Chapter が 30 個あれば 001 ... 030 が作られる

# 3. 音声ファイルに変換
# ffmpeg -i tmp.audio.split-001.mkv -vn -acodec copy tmp.audio.split-001.m4a # 映像ありの場合は、ここで削る
ffmpeg -i tmp.audio.split-001.mkv -vn -ac 2 tmp.audio.split-001.m4a

# タグをつける
mp4tags -A 'アルバム名' -a 'アーティスト名' -albumartist 'アルバムアーティスト' -t 1 -T 30 tmp.audio.split-001.m4a

# mkv を mp4 に変換
ffmpeg -i tmp.split-001.mkv -c copy tmp.split-001.mp4

手順2. 指定したチャプタ前後で2つに分けたい場合

chapters に 1 個だけ指定すれば良い (例だと chapter 28以降を2個めのファイルに出してる)

bash
mkvmerge -o tmp.split.mkv       --split chapters:28 tmp.mkv

手順3. mp4 タグ付けする (まとめて)

bash
ALBUM='ここにアルバム名を書く'
ARTIST='ここにアーティスト名を書く'
ALBUM_ARTIST='ここにアルバムアーティスト名を書く'
START=1
END=27
TRACKS=$(( $END - $START + 1 ))
for N in `seq $START $END`
do
TRACK=$(( $N - $START + 1 ))
NNN=`printf %03d $N`
# ffmpeg -i split-audio-mkv/tmp.audio.split-$NNN.mkv -vn -ac 2 split-audio-m4a/tmp.audio.split-$NNN.m4a
mp4tags -A "$ALBUM" -a "$ARTIST" -albumartist "$ALBUM_ARTIST" -t $TRACK -T $TRACKS split-audio-m4a/tmp.audio.split-$NNN.m4a
done

参考

bash
# Chapter 一覧を取得
mkvextract filename.mkv chapters -s