libcdio で手軽に音楽CDを再生したり、リッピングすることができるが、個別に時間指定しないとトラック毎にファイルが出力されないので他のプログラムと併用しないとあまり実用的ではない。

Zeranoe は非対応なので「お気に入りの動画を携帯で見よう」から保存する。
FFmpegダウンロード お気に入りの動画を携帯で見よう

コマンドサンプル

再生(ドライブレターを指定する)。
ffplay -f libcdio -ss 0 -i D:

エンコードする。
ffmpeg -f libcdio -ss 0 -i D: output.wav
ffmpeg -f libcdio -ss 0 -i D: output.flac

エンコード(開始から3分までの音楽ファイル)。
ffmpeg -f libcdio -ss 0 -i D: -t 180 output.wav
ffmpeg -f libcdio -ss 0 -i D: -t 180 output.flac

トラック情報のメタデータを出力する。例えば以下のような ffmetadata.txt が出力されたとすると、カットする時間は START*TIMEBASE がそのトラックの開始時間になり、END*TIMEBASE がそのトラックの終了時間になる。
ffmpeg -f libcdio -i D: -f ffmetadata ffmetadata.txt

チャプター情報を json で出力する。json を見てカットする時間は start_time がそのトラックの開始時間になり、end_time がそのトラックの終了時間になる。
ffprobe -f libcdio -i D: -print_format json -show_chapters -loglevel error > chapters.json

PCM にチャプターを載せる。
ffmpeg -f libcdio -ss 0 -i D: -map_metadata 0 -acodec pcm_s16le output.mkv

BGM のない外国語学習教材の CD をリッピングしてエンコードする場合に libopus でエンコードすればかなり低容量になる。ただしサンプリング周波数を 48KHz にする必要があるので高品質の sox を使う。チャプターが読める音声プレイヤならファイルを分割する必要がない。
ffmpeg -f libcdio -ss 0 -i D: -af aresample=48000:resampler=soxr -map_metadata 0 -acodec libopus -b:a 14k output.mkv

音声を速くしたり遅くしたりする場合はatemporubberbandフィルタを使う。1.5倍速にして aac にエンコードする例。
ffmpeg -i audio -af atempo=1.5 -acodec aac output-1.5x.m4a
ffmpeg -i audio -af rubberband=tempo=1.5 -acodec aac output-1.5x.m4a

【ffmpeg】倍速再生できる動画にエンコードする
サンプリング周波数を変えずにテンポとピッチを変える rubberband

チャプター毎に分割する例に mkvmerge を使う方法がある。分割されたファイル名は chapterd-001.mkv のような連番になる。
ffmpeg -f libcdio -ss 0 -i D: -map_metadata 0 -acodec flac output.mkv
mkvmerge -o chapterd.mkv --split chapters:all output.mkv

MKVToolNix Downloads – Matroska tools for Linux/Unix and Windows
MKVToolNix Download – VideoHelp: Windows はこちらから保存する。

関連記事

libcdioのコンパイル&インストール (libcdio-0.90以降) お気に入りの動画を携帯で見よう
Is there an elegant way to split a file by chapter using ffmpeg? – Stack Overflow

-ss 0を指定しないと読み込めないバグが昔から報告されているが直る気配がない。
#3815 (libcdio only works with -ss 00) – FFmpeg

公式ドキュメント

FFmpeg Devices Documentation :: libcdio

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)