FFMPEGを使用して動画変換ソフトの容量削減を実現する方法

このQ&Aのポイント
  • 一般の動画変換、編集ソフトは、動画のファイルの容量削減を目的としていないため、FFMPEGを使用することが効果的です。
  • 動画変換ソフトで容量を減らすためには、フレームレートやビットレートを調整するか、h264からh265に変換する方法があります。
  • 経験的に、FFMPEGを使用すると、特にh265の変換では、同じクオリティの動画ファイルでも容量を半分以下にすることができます。
回答を見る
  • ベストアンサー

FFMPEGと動画変換ソフトの容量削減に関して。

一般の動画変換、編集ソフトでは、動画のファイルの容量削減を目的とはしていないのでしょうか? 動画変換ソフトで、ファイルの容量を減らそうと思うときに、フレームレートか、ビットレートを小さくすると思います。 もしくは、h264なら、h265に変える。 のですが、経験的に、変換後元ファイルよりファイル容量が大きくなるか、そこまで変わらないことが、多いと感じます。 しかし、ffmpeg を使ったほうが、経験的に変換後のファイル容量を、小さくできています。 とくに、h265の変換は、 ffmpeg -y -i "入力動画" -vcodec libx265 -acodec copy "出力先ファイル名" だと、確実に、同じクオリティで、動画ファイルの容量が半分以下になります。 もともと、h265は、h264より高圧縮を期待できるので、当たり前なのですが・・・。 しかし、動画編集ソフトで、h265で変換しても、特に指定しなくても、元の動画のビットレートより、変換後のビットレートの方が、基本的に大きくなります。 だから、設定を縮小させても、動画変換ファイルの容量が変わらないか、むしろファイルサイズが増える結果になる。 これは、動画編集ソフトは、動画の編集のエフェクトなりを考えて、元より情報量が増えるだろうという、想定の元、ビットレートを増やすというスタンスなのでしょうか? いろいろとソフトの設定をいじるより、その点、 ffmpeg -y -i "入力動画" -vcodec libx265 -acodec copy "出力先ファイル名" の方が、簡単にかつ、確実にファイルの容量を減らせると思うのですが・・・。 これだと、設定はそのままですよね? そのままで、動画のファイルサイズが半分になります。 動画変換ソフトの内部でも、ffmpegが使われていると思うのですが、、、動画変換、編集ソフトは、動画のファイル容量の削減には、向いていないのですかね? あと、余談。 私の定義では、動画の劣化とは、人の目による判断であって、人の目ではわからない変化は、変換であり、劣化とは考えていません。

質問者が選んだベストアンサー

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1306/1777)
回答No.1

単純にエンコードに使用されたコーデック.ライブラリの初期設定値の問題だと思います。ffmpegは代表的なフリーの動画編集ソフトですが、その他の動画編集ソフトではそのソフト毎にまた別の内蔵されたエンコードエンジン(コーデックライブラリ)が使われています。web上で無料で入手可能なソフトはffmpegを内蔵している場合が多いですが、有料ソフトや無料ソフトであっても歴史的背景等から必ずしもffmpegを使っている訳では無く、またffmpegを使っていたとしてもその動画編集ソフトの開発者が最適だと考える設定値が最終的にffmpegへ送られてエンコードされるため、必ずしも同じ設定地が適用されている訳ではありません。 ffmpegだと初期設定値の場合、x264/x265動画のエンコ設定は「VBR(1pass/ビットレート可変)」になっているはずなので、特に設定しなければ画質は無視して出来上がりのファイルサイズを小さくする事を最優先にした設定値になっています。しかし実際には「CRF(固定品質)」にして最適な数値設定した方が画質とファイルサイズのバランスが取れたより良い高画質低容量の動画ファイルになります。特に現時点でのHEVC/x265はCRFの方が圧倒的に高画質で低容量の動画ファイルを作る事が出来るので、事実上VBRは捨てても構わないと思います(画質は同じでもエンコ時間が倍以上かかる上、ファイルサイズはそれほど圧縮出来ない)。 ffmpegでCRFエンコにした場合、初期設定値は 28 になってたと思いますが…これは 25 くらいの方が良いと思います。ただし動画がアニメか実写映像か、アクション系かインタビュー映像の様に変化の少ない映像かで最適値は変わって来ます。後はマシンパワーとの相談で、可能ならば crf=20 でエンコしたいところですが…これは相当なモンスターマシンで無いと30分動画で10時間くらい掛かってしまいますので。現実的な数値は 22~25 の範囲内だと思います。自分はブッロクノイズが目立ちにくい実写系なら25で、アニメや8bit系ゲーム動画なら23でエンコしてます(再生時間の3倍、平均10fps以上なら良しと考えています)。 また特にHEVC/x265でエンコードする場合、単純なビットレート指定値の他にもファイルサイズ低減に直結する設定値がたくさんあります。前述の crf もそうですが、他にも tu-intra-depth や tu-inter-depth 等も出来上がりのファイルサイズに影響を及ぼします。また総じてエンコード時間が長くなるほど比例して圧縮効率も良くなるため、最終的にはエンコードに使うPCのマシンパワーと相談になると思います。充分なマシンパワーがあれば、エンコ時間を無視して限り無く圧縮効率を追求した高画質なHEVC/x265動画ファイルを書き出す事が可能になります。 P.S. 色々と手前勝手な意見を述べましたが…自分も以前は「少しくらい画質が劣化しても構わない、とにかく動画はファイルサイズが小さければ小さいほど良い!」という考え方だったので、質問者の考えもよく分かります。結局は個人の趣味というか主義主張に集約する問題であって、充分な資金がありハイエンドなモンスターマシンPCを持っている人ならばとにかく画質最優先で、少々のファイルサイズ低減は意味をなさないと思います。また逆に余り余裕が無くて限られたリソースをやり繰りしている人であれば、HDD容量を圧迫させない様に1MBでもファイルサイズを小さくしたいと切望するでしょう。 もちろんこの場合の「画質」とは人間の目で見た印象のみならず、内部的に保持されているデジタルデータ的な高画質の意味合いの方が強いです。質問者は「人間の目で見た印象が全て」とお考えで、無論それは一つの考え方であり、またある程度主流の考え方でもあります。しかしながら自分はデジタル映像のMPEG2から現在に至るまでの "モーションJPEG" の画像圧縮技術の特性を知っていますので、人間の目では視認出来ないごく僅かな差異であっても可能な限りデジタル映像ファイルにはオリジナルに近い色情報を詰め込めるだけ詰め込んで保持させて置いた方が、後々で再利用が容易になり結果的には得をする事が多いと考えています。 具体的な事例で言うと、Youtubeでは投稿された動画ファイルは必ずサーバ上で再エンコ処理される仕様になっており、それが一部の画質至上主義の動画投稿者達から不評で一時期はニコ動が持て囃されていた遠因ですが。これには大いなる利点がり、それはYoutubeに投稿された動画ファイルはそのままのオリジナルファイルが半永久的に保持保存され続ける仕様になっており、技術革新などでYoutube側の動画エンコ処理がバージョンアップすると、この保存されていたオリジナル動画ファイルをベースに新たに最新動画規格で再エンコされる仕組みになっています。 ですので元動画を可逆圧縮形式のUtVideoとFLAC音声の組み合わせなどでアップロードして置けば、その後は永続的に常にYoutubeが提供する最新の動画フォーマットで最適化された動画形式で配信が行われる事になり、いちいち個々の動画投稿者が最適化されたビットレートだのフレームレートなどに頭を悩ます事は無い訳です。この際に元動画が中途半端に圧縮されたH265動画だと、コピーのコピーの様な現象が発生し画面にブロックノイズと呼ばれる汚いゴミの様な映像の乱れが生じてしまいます。これは前述のモーションJPEGの画像変換システムの仕様上で避けられない現象であり、これを最小化して限り無く目立たなくさせるためには元動画を無圧縮のRGBのAVIにするか、内部的な色情報を極力多く保持したままでのMPEG映像としてエンコードするしか回避策はありません。 この2次的発生のブロックノイズは「人間の目で見てギリギリまで許容出来るレベルまで画質を下げた状態」だとほぼ間違い無く発生しこれを低減無効化させる方法は事実上ありません。自分としてはこれを何としても回避したいので、繰り返しになりますが「許容できるファイルサイズの上限まで画質を上げるべき、例えそれが人間の目で知覚出来ないとしても」という考え方になるのです。従って一旦、何かの動画形式に固定させた動画ファイルは、その後は半永続的にそのままでの利用しか考えてないのであれば、最初の1回目のエンコ作業でその時点での最適解を採用するのはありだと思います。再び繰り返しになりますが、結局は個々の利用者の主義や趣向等によって大きく左右される概念なのだと思います。 自分はミドルエンドのPCなのでちょうどその中間というか、ある程度はファイルサイズを小さくしたいけど画質が悪くなるのも防ぎたい派です(笑)。そういう観点からするとHEVC/x265形式の動画は低ビットレートでもAVC/x264並の画質を保持するコーデックでは無く、むしろ「AVC/x264動画と同じファイルサイズで倍以上の高画質でエンコ可能」だと解釈しています。つまり考え方が逆になる訳ですね。具体的にはいわゆる通常のTV放送アニメを基準として、これらの市販BDが通常は1話分で4GB~8GBが現在の主流ですので、これを私的複製版として再エンコして保存する場合、「BDサイズ(1920x1080)、30fps、25分で500MB以下」なら大満足です(音声含む)。 また自分は現在、作成するほぼ全ての動画がYoutube投稿用の素材動画として作成するので、前述の様に個々の動画ファイル単体のファイルサイズの低減には余り興味が無いというか…ほぼ意味が無いと考えています(Youtubeの動画アップロードの上限は {1ファイル:120GB/18時間/縦横pxサイズに制限無し, 動画本数やアカウント毎の容量制限は一切無し} なので)。さらに現在ではもう既にHEVC/x265の次の規格である AV1 が登場しており、Youtube内でも限定的に代替処理が始まっています。 また忘れてならないのが音声のエンコードです。前述の500MB以下とは当然、音声ファイルも含めた合計サイズを意味しますので、音声の方を無圧縮のPCM音源をそのまま動画化していたらそれだけで軽く2GBは超えてしまいます。今現在の主流はAACですが、全音域での品質を優先するのであればMP3でしょうし、アニメ特有の高音域が多い動画ならAACやOpusの方が圧縮効率が良くなります。 そしてやがてこれらの様々な特質を持つコーデックの数種類を組み合わせて1つの動画にまとめあげる複合的な動画作成技術が数年以内に実用化されると思います。Youtubeの親会社であるGoogleはもう既にそれに必要なビッグデータを充分に蓄積していますし、AIによる動画エンコ処理の自動最適化に必要な超高速超大規模サーバも有しています。2020年代には普通にYoutubeに動画を投稿すれば、専門的な知識が無くても誰でも最適化された高画質低サイズの動画が作れる様になるでしょう。これは願望などでは無く間違い無く訪れる未来予測です。 今、こうして我々が喧々諤々の議論をしているのも、やがては懐かしい過ぎ去った日々の思い出となる事でしょう。

tukuneto
質問者

お礼

やはり、動画変換や動画編集ソフトでは、画質の劣化を恐れて、少し大きめの幅(ソフト製作者の最適な度合いが、大きい)なんですかね。 それはわからないでもないですが。 >特に現時点でのHEVC/x265はCRFの方が圧倒的に高画質で低容量の動画ファイルを作る事が出来る 私は、変換時間が異常にかかるので、H265はそこまで使っていませんが、H264では、品質固定(CRF)です。 H264での変換なら、そこまで時間がかかりませんし。 「可変(VBR)の方が、圧縮できるよ」というサイトもありますが、どう頑張っても、同様のクオリティで、可変(VBR)で動画の容量を削減することができなかった。 それは私個人の経験論で、あまり回答してこなかったのですが、半分くらいは?は同意していただき、ありがとうございます。 とても参考になりました。

関連するQ&A

  • craving explorerの変換

    craving explorerで変換するときの画質なんですが、変換前の動画と同じビットレートを指定しても画質が下がっています。 craving explorerでFLVをMP4に変換しているのですが、最近FLVよりかなり高いビットレートで変換していることに気づき、convert.xmlを編集して、同じくらいのビットレートにしました。 手順としては、真空波動研でFLVのビットレートを調べて、convert.xmlのMP4ワイド(PSP)のところのvcodecビットレートをそれより少し高いくらいに編集する、といった感じです。こんな感じにしました↓ <CommandLine>-f psp -vcodec libx264 -coder 1 -bufsize 128 -g 50 -s 480x270 -b 180k -r 30000/1001 -acodec libfaac -ar 48000 -ab 50k</CommandLine> しかし、変換後のMP4ではFLVに比べてもやもやしたノイズがかなり多く出てます。 なぜでしょうか?

  • 【FFmpeg】FLVにWAVを格納できない

    ffmpegを用いてFLVコンテナーにPCM(WAV)を格納する際 44.1kHz/16bit(s16le)はMUXできますが例えば192kHz/24bit(s24le)ではエラーが出ます %~dp0ffmpeg -i %1 -i %2 -vcodec copy -acodec copy %~dpn1_out.flv とバッチを作って放り込んだだけですが これはffmpegの制限なのかFLVの仕様なのか私の方法がまずいのか分かりません ご教授よろしくお願いします

  • 携帯動画変換君と、他の変換ソフトは何が違いますか?

    携帯動画変換君だと見られるのに、他のどの変換ソフトで変換しても動画が見られないんです。 変換はエラーもなく終了し、パソコン上だと変換後の動画は見られるのですが、携帯で見ようとしたときだけ見られないんです。 変換元の動画はflv形式、携帯は913SHです。 試した変換ソフトは、 BatchDOO!、fConvert、WoopieDeskTopなど。 これらのソフトは設定を変えられるので、 携帯動画変換君で使っている設定 「3GPPファイル, 音声AAC形式一般設定」 Title=QVGA標準画質15fpsモノラル TitleE=QVGA Normal quality 15fps Mono Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -timestamp "<%TimeStamp%>" -bitexact -vcodec mpeg4 -fixaspect -s 320x240 -r 14.985 -b 190 -acodec aac -ac 1 -ar 16000 -ab 48 -f 3gp -muxvb 64 -muxab 32 "<%TemporaryFile%>.3gp"" Command1=""<%AppPath%>\cores\QT3GPPFlatten" "<%TemporaryFile%>.3gp" "<%OutputFile%>.3gp" -c QT_3GPP(MobileMP4)_QVGA_AAC.ini" Command2="rm "<%TemporaryFile%>.3gp"" を読み取ってコーデックやビットレートを設定してみましたが、出来ず。 http://mobilehackerz.jp/archive/wiki/index.php?913SH から913SH用の設定 [Item*] Title=QVGA / 映像:Xvid 384kbps 15fps 音声:192kbps 48kHz Stereo Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -timestamp "<%TimeStamp%>"-bitexact -qmin 1 -qmax 31 -vcodec xvid -mbd 2 -4mv -trell -aic -fixaspect -s 320x240 -r 15 -b 384 -acodec aac -ac 2 -ar 48000 -ab 96 -f 3gp -muxvb 192 -muxab 64 "<%TemporaryFile%>_1.3gp"" Command1=""<%AppPath%>\cores\QT3GPPFlatten" "<%TemporaryFile%>_1.3gp" "<%OutputFile%>.3gp" -c QT_3GPP(MobileMP4)_QVGA_AAC.ini" Command2="cmd /c "del "<%TemporaryFile%>*.*""" から読み取って設定を変えてもできず。 よろしくお願いします。。。

  • 【opencv】携帯動画の使用について

    OpenCVが使えるaviファイルの種類はどういったものなのでしょう? 携帯の動画を取り込もうとffmpegというフリーソフトを使い3gpをaviに変換し、それを読み込もうとしたのですがcvCaptureFromAVI(filename)の値がNULLになるらしく、うまくいきません。 同一のプログラムで同じ場所に別のaviファイルを置いたらうまく動いたので、パスの指定ミスとかでは無いと思うのですが・・・ ちなみに、プログラム内からsystem関数を呼び出す形でffmpegを 使用し、system("\"C:~略~\\./ffmpeg\" -i \"test.3gp\" -vcodec mjpeg -acodec mp3 test.avi");という形で携帯の動画を変換しました。 携帯の動画(3gp)をOpencvで使えるようにする方法を教えてください。 よろしくお願いします。

  • PSP用動画のAVC変換について

    いつも勉強させてもらってます。 PSP用に「携帯動画変換君」で動画をAVC変換したところ、PCでは普通に観れるのに、PSPでは「非対応データ」と表示されて観る事ができません。 通常(?)のMPEG4に変換したものはPSPでもちゃんと観れているのですが何が悪いのでしょうか? ちなみに「携帯動画変換君」の変換設定は Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>" -bitexact -vcodec h264 -coder 1 -bufsize 128 -g 250 -s 320x240 -r 29.97 -qscale 25 -maxrate 640 -acodec aac -ac 2 -ar 24000 -ab 48 -f psp "<%OutputFile%>.MP4"" と Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>" -bitexact -vcodec h264 -coder 1 -bufsize 128 -g 250 -s 320x240 -r 29.97 -b 216 -acodec aac -ac 2 -ar 24000 -ab 48 -f psp "<%OutputFile%>.MP4"" で試しました。 また過去の質問回答に >AVC は 「M4V」です というのを見掛けたので拡張子を「M4V」に書き変えてみたのですが、「PSP動画転送君」に弾かれて、PCでも観れなくなってしまいました。 PSPのシステムは2.71にUP済です。 長々とした質問になってしまって恐縮ですが、良きアドバイスをお願いします。

  • PSPで動画を変換したいのですが

    いつも質問ばかりですいません PSPで動画をH264の動画にしたいのですが(容量が軽くて済むので)変換することができませんXMediaRecordeを使っているのですがなぜでしょうか たぶんビットレートやサンプルレートの関係だとおもいます

  • 携帯動画変換君のTranscoding.iniの編集

    携帯動画変換君のFFmpegを18607に変えて、 高画質でPSP用に変換したいです。 しかし、FFmpegのコマンドがいまいち判らないので 変わりに作ってもらいたいのですが。。 解像度 480x272 映像コーデック H.264 フレームレート 30fps ビットレート 384kbps 音声コーデック AAC サンプリング周波数 44100khz ビットレート 128kbps ステレオ こんな感じのが欲しいのですが、、 お願いします><;;

  • 動画をビットレートをそのままで変換するソフト

    変換したい動画を、動画と音声のビットレートを変えずに変換(変換前と同じビットレートになる)できるソフトを探してます。(フリーソフトで) できれば携帯動画変換君みたいに、色んな種類のファイルを変換できるのが良いです。FlvやMPEGやVOBをPSP用に変換できれば良いですけど。 ↑みたいなソフトをどなたか教えてください。

  • 携帯動画変換君でニコニコ動画用の動画を作るには

    携帯動画変換君でニコニコ動画用の動画を作りたいのですが、 iniファイルの設定方法が判りません・・。 作りたい形式は 解像度:512x384 コーデック:映像H.264・音声AAC 拡張子:.mp4 ビットレート:映像CBR384kbps・音声CBR128kbps 2-Passエンコード です。 ちなみにFFmpegは rev.18607を使おうと思っています。 どうか教えて下さい。

  • 携帯動画変換君について教えてください

    フリーウェアの携帯動画変換君をXPで使用しています。 PSP用の動画の変換に使っているのですが、変換後にファイル名がランダムの英数字になっています。 ↓この表記で変換させています↓ [Item15] Title=PSP フルスクリーン H.264 .MP4 (480x272) TitleE=AVC 480x272/29.97fps/VBR QB25 Stereo/128kbps Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>" -bitexact -vol 512 -vcodec h264 -coder 1 -bufsize 128 -vlevel 30 -g 250 -s 480x272 -r 29.97 -qscale 25 -maxrate 1500 -acodec aac -ac 2 -ar 48000 -ab 64 -f psp "<%OutputPath%>MAQ<%RandomNumber5%>.MP4"" これを変換前のファイル名をそのまま反映させるようにするには、どの部分をどのように変更させたら良いのでしょうか?

専門家に質問してみよう