2

私は最近、ユーザーがビデオをアップロードできるWebサイトで作業を開始し、ffmpegの初心者ですが、これらの方法を検索して探していますが、ほとんどの場合は機能していません。自分。

.mp4すべてのビデオタイプをに変換し、可能な限り品質を維持したいと思います。現在、私のコードはアップロード.mov.mp4アップロードのみで機能していますが.avi、変換されていません(それらの新しいファイルも作成されません)。

ビデオからも高品質のスクリーンショットを撮りたいのですが、今撮っているスクリーンショットは本当に低品質のようですので、どうしたのかわかりません。

私が今使っているコードはこれです:

$ffmpeg = "/Users/USERNAME/ffmpeg/ffmpeg";
$src    = "/Applications/MAMP/htdocs/lounge/videos/".$filename."_original.".$ext;
$img    = "/Applications/MAMP/htdocs/lounge/videos/thumbnails/".$filename."_1.jpg";
$img2   = "/Applications/MAMP/htdocs/lounge/videos/thumbnails/".$filename."_2.jpg";
$img3   = "/Applications/MAMP/htdocs/lounge/videos/thumbnails/".$filename."_3.jpg";
$video  = "/Applications/MAMP/htdocs/lounge/videos/".$filename.".mp4";

$src = preg_replace("/ /", "\ ", $src);
$img = preg_replace("/ /", "\ ", $img);

$imgOutput  = shell_exec("$ffmpeg -ss 1 -i $src -s 960x540 -f image2 -vframes 1 $img");
$imgOutput2 = shell_exec("$ffmpeg -ss 15 -i $src -s 960x540 -f image2 -vframes 1 $img2");
$imgOutput3 = shell_exec("$ffmpeg -ss 30 -i $src -s 960x540 -f image2 -vframes 1 $img3");

$videoOuput = shell_exec("$ffmpeg -y -i $src 2>&1 -s vga $video");

720pまたは1080pのビデオを出力するにはどうすればよいですか?

4

2 に答える 2

4

FFMpeg は非常に強力なソリューションですが、必要なものを得るには非常に多くのオプションに慣れる必要があります。

まず、動画を再生するソフトウェア/ハードウェアを特定する必要があります。

ここでは、おそらくフラッシュ プレーヤーまたは HTML5 プレーヤー (たとえば、JWPlayer は両方とも) を使用して、ビデオが Web サイトで再生されると仮定します。

次に、必要な品質に最適なビデオおよびオーディオ形式を見つける必要があります。.mp4は単なるコンテナであり、さまざまなビデオおよびオーディオ形式を含めることができることに注意してください。FFMpeg は、デフォルトでビデオに AVC (H.264)、オーディオに AAC を使用するほどスマートですが、必要なビットレートまたは品質を指定しない限り、おそらく完璧な結果は得られません.

先に進む前に、この非常に役立つリンクhttp://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuideをお読みください。

予測可能なネットワーク スループットを確保する場合は、おそらく ABR または CBR モードを使用する必要があります。主に品質に関心がある場合は、CRF モード (18 ~ 20 で優れた品質が得られます) を使用する必要があります。

ビデオのサイズ変更は、それ自体が複雑なトピックです。サンプル アスペクト比が正方形ではないビデオ、つまり、実際の幅や高さとは異なるサイズで視聴することを意図したビデオ、または単純に 4:3 の比率のビデオに直面していることに気付く場合があります。 16:9 の比率にサイズ変更すると、変形が発生します。

このオプションを使用すると、デフォルトでバイリニア フィルタリング アルゴリズムを使用してビデオ フレームのサイズを変更-sするフィルタが実際に挿入されます。scale通常はこれで十分ですが、ビデオで他の処理手順を実行する場合は、フィルターを明示的に使用する方が興味深い場合があります。例えば:

-vf "scale=-1:720"

これにより、高さが 720 ピクセルになりますが、出力比率が入力比率と同じになるため、ビデオは変形しません。

実際にビデオを大きくしても品質は向上せず、処理時間とファイル サイズが増加することに注意してください。

最後に、HTTP 経由で再生されるファイルの MP4 エンコーディング後に対処しなければならない問題があります。MP4 ファイルには、ファイルの内容を説明するデータのブロックである MOOV と呼ばれるアトムが含まれています。プレーヤー ソフトウェアは、再生を開始できるようにするために、このブロックを読み取る必要があります。これは、ファイルがディスク上で見つかった場合、ローカルでは問題になりませんが、ファイルの末尾で見つかった場合、HTTP からダウンロードしたときにファイルの再生をブロックします。これは、再生を開始する前にファイル全体をダウンロードする必要があるためです。FFMpeg は MOOV アトムをファイルの最後に配置するため、デフォルトでは HTTP プログレッシブ再生には適していません。

qt-faststart や MP4Box などのツールを使用してファイルを変更し、MOOV アトムを先頭に配置する必要があります。

于 2013-03-14T23:00:45.887 に答える
1

試しました-preset veryslow -qp 0か?ロスレス H.264 最適圧縮のプリセットとして、SirDarius の推奨リンクを参照してください。

于 2013-05-17T01:01:23.387 に答える