MPEG-2 の動画ファイルを cat で結合して FFmpeg で調整して MPEG-4 (H.264) にしたら緑色の帯が入ってしまって困ったけど、頑張って解決できた
件名通りです。
動画フォーマットについて知識がなさすぎたことが原因でこんなことになってしまった...
やりたいこと
- いくつかの動画を結合して1つの動画にしたい
やったこと
前段
いくつかの動画を結合するのに、MPEG-1 だか MPEG-2 にエンコードして cat で1つに結合できるっぽい。
# あちらのサイト様やこちらのサイト様で紹介されているとおりです
で、cat で結合した動画ファイルをいつぞやの記事で書いたように "-dts_delta_threshold 1" のパラメータをついけて実行。
$ ffmpeg -i cat.mpeg -dts_delta_threshold 1 out.mp4
結果、緑色の帯が入ってました\(^o^)/
調べた
ggrks てことで調べる。
こちらの'Appleサポートコミュニティ'のディスカッション に!な内容が書かれてた。
カットごとで素材のcodecが変わったり、カットとカットの間に何もない状態(黒で埋めてない)になると、たまに緑のラインが出る時があります。
だけど、結合前の動画ファイルのフォーマットはMPEG-2で同じはず...だけどコーデック違うのかなと思って確認する。
- 動画その1
$ ffmpeg -i movie01.mpeg ffmpeg version 1.0.git (ry Input #0, mpeg, from 'movie01.mpg': Duration: 00:**:**.**, start: 1.000000, bitrate: **** kb/s Stream #0:0[0x1e0]: Video: mpeg2video (4:2:2), yuv422p, 640x360 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
- 動画その2
$ ffmpeg -i movie02.mpeg ffmpeg version 1.0.git (ry Input #0, mpeg, from 'movie02.mpg': Duration: 00:**:**.**, start: 1.000000, bitrate: **** kb/s Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
yuvってのがなんか違う!
yuv てなんだろう
さらーっとこちらのサイト様の内容 を読ませていただいた。
これもフォーマットに関係してくるんですかそうですか、とわかったフリをして次へ。
FFmpeg でどちらかの方にあわせてやれば良いと思いggったらこちらに辿り着く。
xvid, libx264 は yuv420p 入力が基本なので、入力が yuv422p 等でエラーが出る場合は -pix_fmt yuv420p を追加する。
やり直し
動画その1を yuv420p にしてみる
$ ffmpeg -i movie01.mpg -vcodec mpeg2video -pix_fmt yuv420p movie01_yuv420p.mpg (ry $ ffmpeg -i movie01_yuv420p.mpg ffmpeg version 1.0.git (ry [mpeg @ 0x7f8969012e00] max_analyze_duration 5000000 reached at 5005000 Input #0, mpeg, from 'movie01_yuv420p.mpg': Duration: 00:00:05.77, start: 1.000000, bitrate: 2540 kb/s Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc At least one output file must be specified
yuv420p てのになった!
結果
したら cat で結合した後、"-dts_delta_threshold 1" オプションを付けて変換してあげれば緑色の帯がなくなって良い感じになった。
めでたしめでたし。