ffmpegで音声を選択してtsをカットする

複数ストリームある時よくわからなかったのでメモ。

結論

45分30秒経ったところから200秒カット、音声は2ストリーム。

$ ffmpeg -i input.ts -ss 0:45:30 -t 200 -vcodec copy -acodec copy  -map 0:0 -map 0:1 -map 0:2 output.ts

解説

たまに二ヶ国語放送などで音声が2ストリームになっていることがあります。

$ ffmpeg -i  "[151231-1915][GR37][PT3-T1]NHK紅白歌合戦「ザッツ、日本!ザッツ、紅白!」〜NHKホール〜.m2ts"
Input #0, mpegts, from '[151231-1915][GR37][PT3-T1]NHK紅白歌合戦「ザッツ、日本!ザッツ、紅白!」〜NHKホール〜.m2ts':
  Duration: 04:29:57.61, start: 53684.809400, bitrate: 14186 kb/s
  Program 25600
    Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709), 1440x1080 [SAR 4:3 DAR 16:9], max. 20000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x110]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 117 kb/s
    Stream #0:2[0x111]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 137 kb/s
    Stream #0:3[0x130]: Data: bin_data ([6][0][0][0] / 0x0006)
    Stream #0:4[0x138]: Data: bin_data ([6][0][0][0] / 0x0006)
    Stream #0:5[0x140]: Unknown: none ([13][0][0][0] / 0x000D)
    Stream #0:6[0x160]: Unknown: none ([13][0][0][0] / 0x000D)
    Stream #0:7[0x161]: Unknown: none ([13][0][0][0] / 0x000D)
    Stream #0:8[0x162]: Unknown: none ([13][0][0][0] / 0x000D)
    Stream #0:9[0x170]: Unknown: none ([13][0][0][0] / 0x000D)
    Stream #0:10[0x171]: Unknown: none ([13][0][0][0] / 0x000D)
    Stream #0:11[0x172]: Unknown: none ([13][0][0][0] / 0x000D)
    Stream #0:12[0x150]: Unknown: none ([13][0][0][0] / 0x000D)

この時にストリームを選択できるようです。
例えば#0:0と#0:1、#0:2のストリームを持ってきたい場合はこんな感じ。

$ ffmpeg -i input.m2ts -ss 0:45:30 -t 200 -vcodec copy -acodec copy  -map 0:0 -map 0:1 -map 0:2 output_2.ts

さらにストリームを入れ替えたり言語をつけたりすることも可能です。
例えば#0:1を日本語に設定して#0:2に設定、#0:2を英語に設定して#0:1に設定。

$ ffmpeg -i input.ts -ss 0:45:30 -t 200 -vcodec copy -acodec copy  -map 0:0 -map 0:1:0:2 language=jpn -map 0:2:0:1 language=eng output.ts

その他たくさんオプションがあります。ffmpegしゅごい。

ffmpegで音声を選択してtsをカットする

コメントを残す

メールアドレスが公開されることはありません。