見出し画像

ffmpeg を利用した非圧縮動画の作り方【コマンド使い方】

はじめに

個人用の備忘録メモです。
ffmpeg を利用したやり方です。

「-vcodec rawvideo」

上記サイトの「そのほか」の項を参考にさせて頂きました。
「-sameq」 コマンドにも言及されていて助かりました。

■ 再生されてるっぽいけどうまく動かない時
動画も音も鳴ってるようだけど動きが悪いな~という場合

Video codec部分はWMV系またはMPG(Custom:MPEG-1)辺りが再生用には最適です。
(ただしMPGにした場合FFmpeg command-lineに-sameqを入れると再生負荷が大きくなり特にHD動画などサイズが大きいものの再生には向かないのでBitrate部分で変更してください。
ビットレート値の目安として配信サイトで難なく再生できるビットレート値(500K/1000Kとか)の4~5倍程度です。動きが悪かったら調節してください)

画面解像度より大きいHD動画などは
再生時に縮小されて無駄な負荷がかからないようにする為
予め画面サイズまたはそれ以下に変換しておきます。
コマンドは-s 512x384
何か縦長に伸びちゃってる(最近流行の横長サイズとか)という時は
画面からはみ出ないよう縦横の比率を調節すればOK。
(このような感じで-s 800x450)

また、Video部分のFPSを減らせば(30以下)改善することがあります。
変換中の黒い画面でFPSが確認できる。
(, 23.98 tb(r))コマンドは-r 30(小数点可)
■ 音は聞こえるのですが画面が表示されない…
Video codec : の設定を違うので試す。
■ 音が聞こえない、聞こえるけど音が変…
Audio codec : の設定を違うので試す。(対応していてもうまく再生できないこともある)
またはSampling freq : を44100Hzにしてあげる。-ar 44100(Hzはいらん)
■ コマンド -sameqって?
品質を変換元のファイルと同等にするという機能のようです。
ただし画面が全く同じということでは無いみたいなので注意。

二つ以上のコマンドを使いたいとき。半角スペースキーで空ける。またコマンドによって相性があり、同時に使えないのもあります。
また-t 30(小数点可)を追加すれば30秒分だけ変換してくれるのでコマンドを変えて試すことも簡単。
■ そのほか~
普通のAVIに変換したいが、うまくいかない
Video codecをHuffYUV(lossless)にして変換しても、この形式は通常のWindowsでは再生できないので使うことはできません。
FFmpeg command-lineに「-vcodec rawvideo」と
追加入力することで、Video codec 設定は無視され
無圧縮のAVIとして生成されます。
(Copy original video stream以外を選択しておく)
そして、Audio codecを「PCM 16-bit」にすれば
普通のAVIファイルとして変換できます。

この場合、変換前の100倍以上にファイルサイズが膨らむ事が多いので
変換先のディスク容量はチェックしておいてください
(普通に10GB超えることがあります)
必要な部分だけ時間指定するとよいと思います。
(入力例)-vcodec rawvideo -ss 90 -t 10
(90秒時点から開始、10秒間のみ変換。小数点可)

なお、横サイズが1000以上の無圧縮AVIは
再生できないことがあるので注意。
■綺麗にサイズ変更したい(Pazera Free FLV to AVI Converter 1.3以降)
FFmpeg command-lineに-sws_flags lanczosを追加入力することで、高品質な縮小が利用できます。
(半角スペースを空けて両方順番を変えずに入力)

以下参考にさせて頂いたサイト

「-vcodec mjpeg -qscale 0」

ただ、rawvideo は何かと問題があったり
動画編集ソフトで開けない事があるようなので
以下を参考にさせて頂きました。

「-vcodec mjpeg -qscale 0」※1

とする事で、結果的に劣化のない動画を生成する事が可能になります。
「rawvideo」と本質的に同一のデータをエンコードできるわけですね。

こうする事で、可逆圧縮になる。という事だよね?
motion-jpeg は1枚1枚が jpeg の動画形式だけど
JPEG 2000とは違うのかな、違うんだろうな…。

これで、動画編集ソフトでも
ちゃんと読み込めるようになりました。
動画の世界は難しいですね。

※1
昔あった
「-sameq」は、現在は廃止されているので
「-qscale 0」を利用する。

「-sameq コマンド」を入力すると
こっちのコマンドを利用してみては?
みたいな警告が出たと思う。

もしサポート頂けたら いつか個人開発をする時に使わせて頂きます!