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
音声を速くしたり遅くしたりする場合はatempo
、rubberband
フィルタを使う。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