ffmpeg コマンドラインを使用してビデオを変換するためのサンプルコード

ffmpeg コマンドラインを使用してビデオを変換するためのサンプルコード

この記事の本文を始める前に、まず ffmpeg プログラムをインストールする必要があります (Linux では x264 エンコーディングもインストールする必要があります)。 Mac で brew を使用して直接インストールします。

brew ffmpeg をインストールします --with-faac --with-fdk-aac --with-ffplay --with-fontconfig --with-freetype --with-libass --with-libbluray --with-libcaca --with-libsoxr --with-libquvi --with-frei0r --with-libvidstab --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-openssl --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theroa --with-tools --with-x265

インストール後、ffmpeg コマンドを使用して MP4 ファイルを圧縮できます。

ffmpeg -i MVI_7274.MOV -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k a.mp4

パラメータの説明は次のとおりです (https://vistb.net/2012/02/x264-video-compress-intro/ から変更)。

-preset: エンコード設定を指定します。 x264 エンコード アルゴリズムには、設定可能なパラメータが多数あります。パラメータ値が異なるとエンコード速度が大きく異なり、品質にも影響する場合があります。ユーザーがアルゴリズムを理解して手動でパラメータを設定する手間を省きます。 x264 はいくつかのプリセット値を提供しており、プリセットで指定できます。プリセットは、ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo です。 Ultrafast はエンコード速度が最も速いですが、圧縮率が低く、生成されるファイルサイズが大きくなります。一方、Placebo はその逆です。 x264 で使用されるデフォルト値は medium です。プリセットは主にエンコード速度に影響し、エンコード結果の品質には大きな影響を与えないことに注意してください。 HD ムービーを圧縮する場合、通常は slow または slower を使用します。マシンの性能が非常に優れている場合は veryslow を使用できますが、通常、それほど大きなメリットはありません。

-crf: これは最も重要なオプションで、出力ビデオの品質を指定するために使用されます。値の範囲は 0 ~ 51 で、デフォルト値は 23 です。数値が小さいほど、出力ビデオの品質が高くなります。このオプションは、出力ビデオのビット レートに直接影響します。一般的に言えば、480p を圧縮する場合は約 20、720p を圧縮する場合は 16 ~ 18 を使用しますが、1080p は試していません。個人的には、通常の状況では 16 未満にする必要はないと考えています。最善の方法は、いくつかの値をそれぞれ数分間試して、最終的な出力品質とファイル サイズを確認し、ニーズに応じて選択することです。

実際、-b 1024k のようなパラメータもあるのですが、-crf が設定されると -b は役に立たないことがわかりました。私の簡単な試みによると、5D2 で撮影した 18 秒間の 1920x1080 ビデオ (午後の自然光、シンプルな画像、大きな白い壁、黒いドアが 1 つだけ) の crf と圧縮ファイル サイズの関係は次のとおりです。

CRfファイルサイズ
16 54M
18 39M
20 2500万
22 17M
24 11M
26 730万
28 5.0M
30 360万
32 270万
デフォルト14M(CRFは23)

crf が 20、28、32 のときのビデオ品質を比較したところ、32 でも品質が低下していることがわかりました。20 は確かに非常に優れていますが、28 と 20 の違いはそれほど大きくありません。crf 値を 26 ~ 28 に設定するのが適切です。サイズに要件がある場合は、そのままにしてデフォルト値 (おそらく 31) を使用できます。

また、プリセットに関して、低速と高速は実行時間のみに関係します。低速の実行時間は高速の実行時間よりもはるかに長くなります。低速で生成された mp4 ファイルは小さくなり (12M)、高速で生成されたファイルは大きくなります (14M) が、ビデオ品質の違いは明らかではありません。

元のビデオ サイズを 1920x1080 から 960x540 に縮小すると、ビデオ サイズは次のようになります。

CRfファイルサイズ
16 11M
18 670万
20 440万
22 3.0M
24 2.1M
26 160万
28 130万
30 110万
32 893K
デフォルト250万(CRFは23)

まとめると、品質に対する要件が高い場合は 22 以下を選択します。サイズに対する要件が非常に高い場合は 26 を選択します (ただし、品質はわずかに低下します)。それ以外の場合は 24 の方がコスト効率が高く (またはデフォルトの 23 でも問題ありません)、サイズに対する要件が非常に高い場合は 28 以上を選択します。

追記(@gghyooより)

-threads nを使用すると、マルチスレッド操作を実装し、マルチコアCPUを最大限に活用できます。

以下にいくつか例を挙げます。

ffmpeg -threads 2 -crf 20 -y -i ML-02.avi -strict 実験的 ML-02.mp4

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • Ffmpeg を使用して flv ビデオのサムネイルとビデオ時間を取得するためのコード
  • nginx と ffmpeg を使用してストリーミング メディア サーバーを構築するプロセスの詳細な説明
  • Mac OS で Android Studio 用の FFmpeg デコード ライブラリをコンパイルするための詳細なチュートリアル
  • ffmpeg 中国語パラメータの詳細な説明
  • ffmpeg 中国語パラメータの説明と使用例
  • MAC に FFmpeg をインストールするグラフィック チュートリアル

<<:  MYSQLは、ショッピングカートに追加する際に重複追加を防ぐためのサンプルコードを実装します。

>>:  CocosCreator システムイベントがどのように生成され、トリガーされるかについての詳細な説明

推薦する

MySQLの左結合と内部結合について簡単に説明します

序文最近、X 省のコールド チェーン トレーサビリティ システムの開発で忙しくしています。毎日午後 ...

高速でクールな揺れアニメーション効果を実現するCSS

1. Animate.css の紹介Animate.css は、Web プロジェクトですぐに使用で...

MySQLのユーザーアカウント管理と権限管理の詳細な説明

序文MySQL の権限テーブルは、データベースの起動時にメモリにロードされます。ユーザーが ID 認...

期間限定フラッシュセール機能を実装するJavaScript

この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...

Vueは、選択した月に応じて日付に対応する曜日を動的に表示します。

私たち謙虚なプログラマーは、今でもこう歌わなければなりません。「あなたも私も、この世に生まれて、一日...

IE8 と Chrome でテーブルの幅を修正する方法

IE8 や Chrome で上記の設定を使用すると、画面の最大幅に合わせて表示が統一され、各列の幅は...

JavaScript でフォロー広告を実装するためのサンプルコード

フローティング広告は、ウェブサイト上で非常に一般的な広告形式です。フローティング広告は、ユーザーの閲...

Vue で配列パラメータを渡すための get / delete メソッド

フロントエンドとバックエンドがやり取りする場合、get または delete を介してバックエンドに...

SpringBootはActiviti7実装コードを統合する

Activiti7 の正式リリース以降、SpringBoot2.x との統合開発を全面的にサポートし...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

linuxdeployqt を使用して Ubuntu で Qt プログラムをパッケージ化する問題を解決する

いくつかの Qt インターフェース プログラムを作成しましたが、Qt 環境がインストールされていない...

Mysql で期間の交差をクエリする方法

MySQLクエリ期間の交差使用シナリオデータベース テーブルには、starttime と endti...

secure_file_priv nullの問題を解決する

secure_file_priv = ' ';管理者としてcmdを実行します。 my...

ビジュアルデザインとインタラクションデザインについて

<br />製品設計プロセス全体において、ビジュアルデザインとインタラクションデザインの...

Windows Server 2008 のサーバー パフォーマンス監視に関するチュートリアル

次に、ログ管理、ログのアーカイブ、ログのトラブルシューティング、イベントの転送と収集のためのコンピュ...