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 における無効な Null セグメント判定と IFNULL() 失敗の解決策

MySql Nullフィールド判定とIFNULL失敗処理ps: (プロセスを表示したくない場合は、S...

Vue3 ベースのフルスクリーン ドラッグ アップロード コンポーネント

この記事は主に、みんなで共有できるVue3ベースのフルスクリーンドラッグアップロードコンポーネントを...

実践で遭遇するフロントエンドの基本(HTML、CSS)

1. div css マウスの手の形は cursor:pointer; です。 2. HTML の相...

JavaScriptは双方向リンクリストプロセス分析を実装します

目次1. 二重連結リストとは何か2. 双方向リンクリストのカプセル化3. 双方向リンクリストの一般的...

Nginx と Lua を使用した JWT 検証の概要

目次序文Lua スクリプトnignx.conf の設定Dockerfileの設定序文データベースやそ...

CentOS のファイルと権限の基本操作チュートリアル

序文始める前に、ファイル属性とファイル属性を変更する方法について簡単に理解しておく必要があります。 ...

Vue.js ドロップダウン コンポーネント付きテキストボックス

ドロップダウン付きのテキストボックスを使用すると、ユーザーはドロップダウン リストから入力を選択した...

MySQL 8.0.20 のインストールと設定の詳細なチュートリアル

この記事では、MySQL 8.0.20のインストールと設定方法についての詳細なチュートリアルを参考ま...

Linux におけるゼロコピー技術の使用に関する簡単な分析

この記事では、Linux におけるいくつかの主要なゼロコピー テクノロジと、ゼロコピー テクノロジを...

HTML でよく使われるタグの概要 (必読)

コンテンツ詳細タグ: <h1>~<h6>タイトルタグ<pre>テ...

XHTML の珍しいが便利なタグ

Xhtml には、あまり使用されないが非常に便利なタグが多数あります。半分の労力で 2 倍の結果を達...

MySQLデータ損失のトラブルシューティング事例

目次序文現地調査ケースの再現要約する序文最近、友人が突然WeChatで連絡してきて、MySQLでデー...

JSで実現したページサイドバーの効果に関する研究

目次発見: ディスプレイアニメーションの応用実装:記事の1行目を表示する効果を実現する方法実際、その...