web-dev-qa-db-ja.com

FFMPEGは品質を損なうことなくflvをmp4に変換します

現在、HTML5ビデオプレーヤーで使用するために、.flvフラッシュファイルを.webmファイルと.mp4ファイルに変換しています。

_

私はこのffmpegコマンドをWEBMに使用します。ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webmはうまく機能し、ファイルサイズは比較的同じです(重要ではありません)。

_

MP4では、私は以下を使っています:ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

それは罰金.mp4に変換し、品質の損失を防ぎますが、ファイルサイズはほぼ3倍のサイズです。

あまりにも多くの品質を失うことなく、はるかに高いファイルサイズを妨げることなく、MP4に変換するためにどんなffmpeg式を使用できますか?

54
Chad Whitaker
ffmpeg -i filename.flv -c:v libx264 -crf 19 -strict experimental filename.mp4

使用するビデオコーデックを指定する必要があります。あなたのコマンドでは-vcodec-c:vを指定していないので、ffmpegはMP4のデフォルトのコーデック(mpeg4)を使いますが、圧縮効率はあまり良くありません。代わりにlibx264を使用して、品質レベルであるCRFを設定してみてください(低いほど良い、デフォルトは23、正しい値は18から28の間です)。

Libx264でのエンコーディングは一種の複雑なので、 H.264エンコーディングガイド を調べてください。

また、-strict experimentalを指定する必要があります。そうしないと、「エンコーダ 'aac'は実験用ですが実験用コーデックは有効になりません。使用する場合は '-strict -2'を追加してください。 "

56
sashoalm

このコマンドは再エンコードなしでコンテナを変更するだけです

ffmpeg -i input.flv -codec copy output.mp4
41
c97

avconvffmpegは本質的に同じものです。 [最近の時点では多少の相違がありますが、あなた自身のffmpegをコンパイルする場合には、家に書くべきものはそれほど多くありません。ビデオのプロポーションが間違っていることを伝えようとします。]しかし、ffmpegコンパイルガイドを読んでgitからコンパイルしたくない場合は、ほとんどのOSに搭載されている古いバージョンの問題はありません。 avconvを参照している減価償却警告は、彼らがffmpegを試して置き換えるための新しいutilを作成したことをあなたに言っています、しかしそれはSOでも彼らがそれをカットしようとした場合、私たちはみんなavconvからffmpegへのソフトリンクを作成しようとしているので、彼らは仕事を止めてドロップすることはないでしょう。

avconvを使用することは悪いことではありません。本質的に空のメッセージである減価償却警告について言及している1つの回答が、ffpmegに代わるもので、avconvを試してみることができます。

avconv -i inputfile.flv -map 0 -c:v libx264 -c:a copy outputfile.mp4

本当に同じです

ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis

基本的に最初の方であなたはより短い利きのオプションを使用しています、そして2番目の中ではもっと書かれた種類です。

ALSO -map 0はオーディオトラックを参照しているので、マルチオーディオトラックを扱うことができるmp4aのようなものを使用すれば、結果のファイルにすべてのオーディオストリームをコピーするためにこれを残すことができます。これは、同じファイル内で複数のオーディオトラックをサポートしていないコーデックを使用している場合にのみ必要です。すべてではなく必要なオーディオをマップしたい場合があります。もちろん、使用するスペースを最小限にしようとするなら、あなたはファイルからほんの少しサイズをノックすることを試みるためにただ1つを指定することができました[オーディオはおそらくビデオトラックの1/3サイズのようです[そしてそれは寛大です]]。

-c:v = codec(video) so:-c:v libx264は次のものと同じです。-vcodec libx264 FYI;この例と同じです:-c:v copy = -vcodec copy

さらにFLVの場合、flvファイルはaviと同じです。ビデオまたはオーディオ用のコーデックをいくつでも含むことができるという点で、aviと同じです。あなたがビデオやオーディオストリームをコピーすることを選択する前に、あるいはそれを何か新しいものに変換したいと思う前に、まずファイル自体の中で何が使われているか調べるために最適なメディア検査ユーティリティを使いたいでしょう。そのため、あるFLVに最適なコマンドは別のFLVと同じではない可能性があります[もちろん同じソースから複数のFLVを取得する場合、それらは同じ方法でエンコードされますが、保証されることはありません]。

ニットピックしようとしていないだけでウェブ検索でこれに遭遇し、人々のために物事を少し明確にするのを手助けしようとしたかったです。

繰り返しますが、この回答ではこの1つ以下の回答が示されていますが、ffmpegを実行すると常にこのメッセージが投稿されます。ほとんどの場合、どちらのコマンドを使用してもまったく同じ結果が得られます。これは必ずしも完全な再トランスコードになるとは限りません、なぜですか。 A、必要でなければ、それは時間の節約になります、そして、あなたがそれがすでにビデオコーデックに圧縮されているファイルを再トランスコードするなら、あなたは本質的にすでに圧縮された何かに対して圧縮ルーチンを実行しています。ソースよりも品質が劣ります。たとえば、AVIのようなFLVは他のコーデックのコンテナにすぎないため、FLVは技術的にはFLVラッパー内のMP4になる可能性があります。それで、それはあなたがそれが全くトランスコードされる必要があるかどうかに関してあなたがそれをあなたがそれを変換しているものと比較したものと比較してビデオとausioコーデックのためにソースflvが持っているものに依存します。 FLV内で彼らがオーディオ用にH264 MP4ビデオとMP4aを使用した場合、それをコピーしてファイルヘッダーを調整するだけでよいので、MP4ビデオの代わりに真のMP4として読み取られるように再変換する必要はありません。 FLVファイル内

3
Pariah

このガイド によると、AVレコーディングを行わずにFLVをMP4に変換する適切なコマンドは次のとおりです。

ffmpeg -i input.flv -c copy -copyts output.mp4

それはAVCビデオとAACまたはMP3オーディオですべてのケースで私のために完璧に働きました。

3
Al Kepp