web-dev-qa-db-ja.com

UbuntuでのWebMからMP4への変換は遅く、品質が悪い

コマンドを使用しました

ffmpeg -i input.webm -q:v 10 -c:a copy out.mp4

また、ffmpegの代わりにavconvを使用してみました。

変換は成功しましたが、品質が悪いです。また、時間がかかります。また、Windows MediaPlayerでは再生されません。 (この理由は、ファイルが変換されるmpegv1です。)ファイルをmpegv2に変換するオプションを追加するにはどうすればよいですか?

コマンドライン出力は次のとおりです。

avconv version 0.8.16-4:0.8.16-0ubuntu0.12.04.1, Copyright (c) 2000-2014 the Libav developers
  built on Sep 16 2014 18:33:49 with gcc 4.6.3 
[matroska,webm @ 0xe737a0] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from 'test.webm':
  Duration: 00:00:08.57, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: vp8, yuv420p, 1536x768, PAR 1:1 DAR 2:1, 1k fps, 1k tbr, 1k tbn, 1k tbc (default) 
    Stream #0.1: Audio: vorbis, 44100 Hz, stereo, s16 (default)
[buffer @ 0xee38e0] w:1536 h:768 pixfmt:yuv420p
Output #0, mp4, to 'c2.mp4':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: mpeg4, yuv420p, 1536x768 [PAR 1:1 DAR 2:1], q=2-31, 200 kb/s, 1k tbn, 1k tbc (default)
    Stream #0.1: Audio: libvorbis, 44100 Hz, stereo (default)
Stream mapping:
  Stream #0:0 -> #0:0 (vp8 -> mpeg4)
  Stream #0:1 -> #0:1 (copy)
Press ctrl-c to stop encoding
frame= 8572 fps=342 q=10.0 Lsize=   90902kB time=8.56 bitrate=86984.0kbits/s dup=8438 drop=0    
video:90823kB audio:0kB global headers:0kB muxing overhead 0.086778%
2
dfordevy

ffmpegバージョン1.2.6-7:1.2.6-1〜trusty1

ffmpeg -i one.webm -r 10 -cpu-used 5 -c:v libx264 -crf 20 -c:a aac -strict Experimental -loglevel error /tmp/one.mp4

これは非常にうまく機能します。 1時間のビデオを10分で変換しました。

4
dfordevy

ここでいくつかの問題:

  • Ubuntu12.04リポジトリの古いバージョンのavconvを使用しています。
  • このバージョンには、H.264エンコーダー(libx264)がコンパイルされていません。
  • そのため、代わりにmpeg4エンコーダーを使用して、MPEG-4パートIIビデオを選択します。同じ.MP4コンテナを使用していますが、MPEG-4パートIIはH.264ほど効率的ではありません。
  • コマンドは-q:v 10を使用しますが、これは非常に低品質です。範囲は1〜31で、1が最適です。理想的には、2〜5程度のものが必要です。
  • VorbisオーディオをMP4コンテナにコピーできないため、-c:a copyは機能しません。

したがって、これを修正するには、次の2つのオプションのいずれかをお勧めします。

  1. avconvを使い続けてください。 Ubuntu12.04にapt-get install libavcodec-extra-53をインストールし、Ubuntu14.04にlibavcodec-extra-54をインストールして、avconvのx264サポートを取得します。
  2. 代わりに、最近のffmpegを使用してください。ダウンロード 最近のffmpegビルドLinux Static Buildsリンクをクリックしてください)。 ffmpegバイナリをどこかに抽出し、これを使用します。

次に、次のコマンドを実行します(選択内容に応じて、ffmpegavconvに置き換えます)。

ffmpeg -i input.webm -c:v libx264 -crf 20 -c:a aac -strict experimental out.mp4

CRFは品質を管理し、18〜28が賢明な選択です。低い方が良いです、そして23がデフォルトです。オーディオのビットレートは、-b:a 128kなどで設定できます。

変換を高速化したい場合は、-presetを使用して、ultrafast, superfast, veryfast, faster, fastのいずれかに設定できます。 -preset fast。これを設定すると、ファイルサイズが大きくなることに注意してください。

ffmpegのH.264エンコーディングガイド は非常に役立ち、avconvにも適用する必要があります(ただし、それを保証するものではありません)。

MPEG-2については、次の質問をご覧ください。 FFMPEGを使用して可能な限り最高品質のMPEG2ビデオファイルを作成するには? —オーディオとして-c:a libmp3lameを選択することを忘れないでください代わりに。

8
slhck