私は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
出力ログの最後の行は一般的すぎるため、さらに調べる必要があります。エラーはこれです:
[ac3 @ 0x9fdc740] invalid bit rate
問題は、何らかの理由でavconvがMP3オーディオをAC3にエンコードすることです。実際、ビデオのサイズを変更するだけの場合は、オーディオビットストリームをそのままにすることができます。
サイズを変更して再エンコードすると、品質が大幅に低下することに注意してください。したがって、本当に必要な場合を除き、実行しないでください。あなたのビデオは 世代損失 の影響を受けます。
可能であれば、MPEG-4パート2コーデック(Xvid、またはlibavcodec-native mpeg4
)の使用を避け、MPEG-4パート10/H.264コーデック(例:x264)H.264はAVIコンテナーで適切にサポートされていないため、ほとんどの場合、AVIではなくMP4を使用します。
ffmpeg -i in.avi -c:a copy -c:v libx264 -crf 23 -s:v 640x360 output.mp4
これは、オーディオストリーム(-c:a copy
)をコピーし、ビデオをx-264(-c:v libx264
)に 一定の品質 23(-crf
)でエンコードします。品質を上げるには、ここで低い値を使用します(正気値は18〜28)。サイズは-s:v
で変更されます。
ここではFFmpegをLibavと同義で使用しています。構文は同じであるべきだからです。ただし、Ubuntuに同梱されているデフォルトのLibavバージョンを破棄して ソースからFFmpegをコンパイルする または最近の Linux静的ビルド を使用することをお勧めします。
指定されたビデオビットレートは非常に低く、200kpbsです。このコマンドを試してください
ffmpeg -i input_video -b 800 -s 640x360 -vcodec xvid -acodec copy output_video
コメントで示唆されているように、デバイスがh.264をサポートするかどうかは、より良い選択です。