avconv/ffmpegを使用したビデオダウンサンプリング

avconv/ffmpegを使用したビデオダウンサンプリング

私はavconv / ffmpegのエンコードと使用についてほとんど知りません。次のようにビデオをダウンサンプリングしようとしています。

avconv -i blah_in.avi -s 640x360 -pass 1 blah.avi
avconv -i blah_in.avi -s 640x360 -pass 2 blah.avi

私はこれが簡単であることを知っていますが、問題が何であるかわかりません。パス1のエラーメッセージは次のとおりです。

avconv version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
  built on Jun 12 2012 16:37:58 with gcc 4.6.3
[avi @ 0x9fdd240] non-interleaved AVI
Input #0, avi, from 'blah_in.avi':
  Metadata:
    encoder         : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
  Duration: 01:21:59.24, start: 0.000000, bitrate: 8996 kb/s
    Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
File 'blah.avi' already exists. Overwrite ? [y/N] y
[buffer @ 0x9fe1e00] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x9fdcfa0] w:1920 h:1080 fmt:yuv420p -> w:640 h:360 fmt:yuv420p flags:0x4
Incompatible sample format 's16' for codec 'ac3', auto-selecting format 'flt'
[ac3 @ 0x9fdc740] invalid bit rate
Output #0, avi, to 'blah.avi':
  Metadata:
    encoder         : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
    Stream #0.0: Video: mpeg4, yuv420p, 640x360 [PAR 1:1 DAR 16:9], q=2-31, pass 1, 200 kb/s, 90k tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 44100 Hz, stereo, flt, 200 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 -> mpeg4)
  Stream #0:1 -> #0:1 (mp3 -> ac3)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

私は多くのことを試しましたが、同様のエラーメッセージが表示されるか、解像度が低いためではなく、圧縮アーティファクトでいっぱいで、品質が非常に悪かった。

今私が達成したいのは、私の子供のビデオデバイスでうまく再生される次のaviファイルと同じ解像度/エンコードです。

Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 624x352 [PAR 1:1 DAR 39:22], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s

答え1

出力ログの最後の行はあまりにも一般的です。もっと詳しく見てください。エラーは次のとおりです。

[ac3 @ 0x9fdc740] invalid bit rate

問題は、何らかの理由でavconvがMP3オーディオをAC3にエンコードしようとしていることです。実際にビデオのサイズを変更するだけで、オーディオビットストリームを保存できます。


サイズを変更して再エンコードすると、品質が大幅に低下します。だから必ず必要な場合でなければしないでください。あなたの動画が影響を受けます。世代の損失

可能であれば、MPEG-4 Part 2コーデック(Xvidまたはlibavcodec-native mpeg4)の使用を避け、MPEG-4 Part 10 / H.264コーデック(x264など)を使用してください。 AVIコンテナはH.264を正しくサポートしていないため、ほとんどの場合、AVI以外のユーザーが選択したコンテナであるMP4を使用します。

ffmpeg -i in.avi -c:a copy -c:v libx264 -crf 23 -s:v 640x360 output.mp4

次に、次のコマンドを使用してオーディオストリーム()をコピーし、-c:a copyビデオをx264()にエンコードします。-c:v libx264安定した品質-crf合計23()個のアイテムです。ここで低い値を使用すると品質が良くなります(通常の値の範囲は18〜28です)。それに応じてサイズが変わります-s:v

ここでは構文が同じでなければならないので、Libavと同義語としてFFmpegを使用しています。しかし、Ubuntuに付属のデフォルトのLibavバージョンを放棄することをお勧めします。ソースコードからFFmpegをコンパイルするまたは最寄りの場所を使用してくださいLinux静的ビルド

答え2

指定されたビデオビットレートは200kpbsと非常に低いです。このコマンドを試してください。

ffmpeg -i input_video -b 800 -s 640x360 -vcodec xvid -acodec copy output_video

デバイスがサポートしている場合は、コメントのアドバイスに従ってください。264これがより良い選択になります。

関連情報