ffmpegで非圧縮動画が上下逆になる対策(rawvideo)

ffmpegで非圧縮動画(rawvideo)を作ると,なぜか上下逆になる。そのときの対策メモ。

ffmpegは動画ファイルを別の動画ファイル・別の圧縮形式,解像度の変更,音量の調整が出来るソフト。動画の切り出しや,音声だけ,動画だけの取り出し,複数の静止画パラパラアニメ方式でで動画に変換するという機能もある。ウインドウなどはないが,単純な変換を大量にする場合は,ウインドウを開く重たい動画編集ソフトを使うよりも作業効率が良いだろう。しかもffmpegは無料で入手できる。

ffmpegで4スレッド(4CPU),音声なし,非圧縮,解像度640×480,アスペクト比4:3,フレームレート 29.97fpsの非圧縮動画を作るには

それぞれ
4スレッド -threads 4
音声なし -an
非圧縮 -vcodec rawvideo
解像度640×480 -s 640×480
アスペクト比4:3 -aspect 4:3
フレームレート 29.97fps -r 29.97
を指定すれば良いので

ffmpeg -threads 4 -i 入力動画.avi -an -vcodec rawvideo -s 640×480 -aspect 4:3 -r 29.97 出力動画.avi

となる。入力動画は.aviに限らず,ffmpegで対応している動画ファイルなら何でもOK。ffmpeg -formats コマンドで一覧を表示できる。一覧は対応フォーマットの頭にDとかEとかの記号ついていて出てくる。Dがデコード対応。読み込める形式。Eはエンコード対応。出力できる形式である。ファイルとコーディック(圧縮方式)の一覧が出る。

この動画はUbuntuの動画プレイヤーでは再生できないが,Ubuntuのvlc player なら再生できる。Windowsのメディアプレイヤー等でも問題なく再生できる。

だけど, これで作った非圧縮動画は,なぜか上下が逆になる

もう1回おなじ様にかければ,さらに逆になって元に戻る。(^^;あまりに単純だが,ちゃんとできるので助かる。
だから以下の様にすればOK
ffmpeg -threads 4 -i 入力動画.avi -an -vcodec rawvideo -s 640×480 -aspect 4:3 -r 29.97 tmp.avi
を実行し,直後に
ffmpeg -threads 4 -i tmp.avi -an -vcodec rawvideo 出力動画.avi
とする。
フレームレートとか解像度などの指定がないと元と同じ設定になる。また,指定しない方が速いので,逆になったのを戻すときは,なるべく省略する。

終わったら tmp.aviを消せばOK。
画質は非圧縮から非圧縮への変換なので劣化はないはず。時間が2倍かかるが,2パスエンコードと思えばいいかも・・・。
ただし,非圧縮動画を1つ余計に作るのでHDD空き容量に注意。

なお,フレームレート指定なしの方が変換は速い。元の動画のフレームレートと出力したい動画のフレームレートが同じなら省略したほうが変換が速いし動画の劣化が少ないだろう。
ffmpeg -threads 4 -i 入力動画.avi -an -vcodec huffyuv -s 640×480 -aspect 4:3 出力動画.avi

メモ:144×108

comments

コメントを残す