帆船模型に再挑戦

趣味の王様(本当か?)帆船模型製作に再挑戦する記録

TSファイルの処理 ch切り替えポイントを求め切り出す

PT3とかで録画した5.1chの映画のtsファイルをx264で圧縮して、
カーナビでもみられるように音声をAC3にしようという計画。

もとのtsファイルは
format mpegts
vcodec mpeg2video
acodec aac 48000 Hz

録画した素のtsにはchの切り替わり(2ch⇔5.1ch)が2箇所にある。
これを

ffmpeg -i input.ts temp.ts
とかして terminalの幅を狭くしてみると

frame= 545 fps=155 q=31.0 size= 5583kB time=00:00:18.11 bitrate=252frame= 640 fps=159 q=31.0 size= 6009kB time=00:00:21.28 bitrate=231Input stream #0:1 frame changed from rate:48000 fmt:fltp ch:2 chl:stereo to rate:48000 fmt:fltp ch:6 chl:5.1
frame= 712 fps=157 q=31.0 size= 6434kB time=00:00:23.69 bitrate=222frame= 784 fps=156 q=31.0 size= 6776kB time=00:00:26.09 bitrate=212
と最初のch変更ポイントがわかる。この場合だいたい24秒。

2つ目のch変更ポイントは、もとのtsファイルの終了間際。
全体の長さが01:50くらいなので、
ffmpeg -ss 01;45;00 input.ts tmp.ts
としてみると
frame= 1777 fps=147 q=31.0 size= 19701kB time=00:00:59.22 bitrate=272frame= 1857 fps=148 q=31.0 size= 20247kB time=00:01:01.89 bitrate=267Input stream #0:1 frame changed from rate:48000 fmt:fltp ch:6 chl:5.1 to rate:48000 fmt:fltp ch:2 chl:stereo
frame= 1961 fps=150 q=31.0 size= 20679kB time=00:01:05.36 bitrate=259frame= 2071 fps=153 q=31.0 size= 21109kB time=00:01:09.03 bitrate=250
とだいたい59秒後に切り替わりがあるので、全体の長さは 01:45:00+00:00:59で01:45:59となる。
(訂正:start pointの分を引くので、01:45:35が正しい)

そこで、
ffmpeg -i input.ts -ss 24 -t 01:45:59 input.ts -vcodec copy -acodec copy output.m2ts
と同じtsファイルで切りだしてみる。

これでうまくいく場合は問題ないが、
かなりの確率で
AAC bitstream not in ADTS format and extradata missing
av_interleaved_write_frame(): Invalid data found when processing input
などとエラーがでて途中で止まってしまう。
 
この場合は
ffmpeg -i input.ts -ss 24 -t 01;45;59 input.ts -vcodec copy -acodec libfaac -ac 6 -ar 48000 -ab 264k output.m2ts

としてaacを再変換する