make fate
は全てのテストを実行しないのですか?make fate
はこのサンプルを見つけないのですか?それはその任務に取り掛かる人がいないからです。Libav の開発は 個々の開発者にとって重要な任務によって進められています。 あなたにとって重要な機能があるときには、それが実装されるようにする一番よい方法は あなた自身がその任務に着手することです。
いいえ。Libav はオープンソースのコーデックしかサポートしません。Windows の DLL は移植可能でなく、 膨らみ過ぎで、また多くの場合遅いです。
たとえ avconv がそのコンテナフォーマットを読むことができても、そのフォーマットの全てのコーデックを サポートしているとは限りません。avconv のドキュメントにあるサポートするコーデックのリストにあたって みてください。
追加のコーデックをインストールしない限り、 Windows は MPEG のような標準フォーマットを十分にはサポートしていません。
下に挙げる映像コーデックはほとんどの Windows システムで動作するでしょう:
.avi/.asf
.asf のみ
.asf のみ
.asf のみ
ffdshow または Xvid のような MPEG-4 コーデックがインストールされている場合に限る。
.mpg のみ
Windows では ASF ファイルがしばしば .wmv や .wma という拡張子を持つので注意してください。 また Microsoft が ASF フォーマットの特許を主張しており、非 Microsoft のソフトウエアで ASF ファイルを作成するユーザーを訴える、もしくは脅かす恐れがある、ということも述べておくべきでしょう。 可能な場合には ASF を避けることを強く忠告します。
下に挙げる音声コーデックはほとんどの Windows システムで動作するでしょう:
常時
LAME のような MP3 コーデックがインストールされている場合。
error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
これは gcc のバグです。私たちに報告しないでください。代わりに、gcc の開発者にそれを 報告してください。私たちは gcc のバグのための回避策を加えるつもりはないことに注意してください。
また gcc の開発者(のうちのいく人か)はこれがバグないし彼らが直すべきバグだと信じていないことに 注意してください: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11203。 そしてさらに、彼らのうちには決定不可能な問題と NP-hard 問題の違いを分かっていないものもいます...。
その JPEG ファイルが img1.jpg, img2.jpg, img3.jpg,... なら、次のようにします:
avconv -f image2 -i img%d.jpg /tmp/a.mpg
‘%d’ は画像の番号に置き換えられます。
‘img%03d.jpg’ とすると ‘img001.jpg’, ‘img002.jpg’, ... などになります。
多数の画像をリネームする際には、次のようなコマンドを使って
負担を和らげることができます。このコマンドは、bourne shell の
構文を使って、カレントディレクトリにある *jpg
に合致する
すべてのファイルから ‘/tmp’ ディレクトリに
‘img001.jpg’、‘img002.jpg’ などと並べてシンボリックリンクを張ります。
x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done
これらを最も古い時点で変更されたものから先に並べたい場合には、
*jpg
のところを $(ls -r -t *jpg)
で置き換えてください。
そして実行してください:
avconv -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg
avconv が読み込むどの画像フォーマットでもこれと同じ方式が用いられます。
次のようにします:
avconv -i movie.mpg movie%d.jpg
この ‘movie.mpg’ が入力として用いられ、 ‘movie1.jpg’, ‘movie2.jpg’, ... などに変換されるでしょう。
ファイルフォーマットの自己認識に頼る代わりに、エンコーディングを強制するため
を使うことになるかもしれません。
これらを前の例に応用すると:
avconv -i movie.mpg -f image2 -c:v mjpeg menu%d.jpg
“jpeg” というコーデックはないことに注意してください。代わりに “mjpeg” を使ってください。
マルチスレデッド MPEG* エンコーディングのため、エンコードされた断片はそれぞれ独立でなければなりませんが、 そうでなければスレッド n は実用的には n-1 が終わるまで待たなくてはなりません。 そのため品質の小さな低下があるのはごく論理的なことです。これはバグではありません。
ファイル名として ‘-’ を使ってください。
’-f image2 test%d.jpg’ を試してください。
コーデックの中には、MPEG-1/2 のように、少数の決まったフレームレートのみを許すものがあります。 -c:v コマンドラインオプションで別のコーデックを選んでください。
Xvid、DivX(バージョン 4+) どちらも ISO MPEG-4 標準の実装です (これと同じ標準を使った他の多くのコーディングフォーマットがあることに注意してください)。 したがって、これらのフォーマットにエンコードするためには ’-c:v mpeg4’ を使ってください。 MPEG-4 でコードされたファイルに格納される既定の fourcc は ’FMP4’ です。 異なる fourcc にしたい場合は、’-vtag’ オプションを使ってください。例えば、’-vtag xvid’ とすると video fourcc としてデフォルトの ’FMP4’ ではなく ’xvid’ が格納されるよう強制します。
’-mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 1/2’, 試してみるべきもの: ’-bf 2’, ’-flags qprd’, ’-flags mv0’, ’-flags skiprd’。
’-mbd rd -trellis 2 -cmp 2 -subcmp 2 -g 100 -pass 1/2’ ですが ’-g 100’ はデコーダーによっては問題が生じるかもしれません。 試してみるべきもの: ’-bf 2’, ’-flags qprd’, ’-flags mv0’, ’-flags skiprd’。
インターレースされたデータには ’-flags +ilme+ildct’ を使うべきで、また ’-flags +alt’ も良いかもしれません。 さらに結果が本当にむちゃくちゃなら ’-top 0/1’ を試してください。
Libav を ./configure --enable-avisynth
としてビルドしている
(MinGW/Cygwin プラットフォームでのみ可能性があります)なら、
DirectShow が読めるファイルならどれでも入力として使えます。
単に次の1行からなるテキストファイル “input.avs” を作成します:
DirectShowSource("C:\path to your file\yourfile.asf")
... そして続いてこのテキストファイルを avconv にフィードします:
avconv -i input.avs
Avisynth に関するこれ以外の一切のヘルプについては、 Avisynth のホームページ を訪ねてください。
単にファイルを結合するだけでビデオファイルをつなげることができるマルチメディア コンテナ(MPEG-1, MPEG-2 PS, DV)が少しだけあります。
したがってマルチメディアファイルを結合するには、まずそれらをこれら特権的なフォーマット
にコード変換し、そして質素な cat
コマンド(もしくは同じような Windows 上の質素な
copy
)を使い、最後に選んだフォーマットに変換し直すことです。
avconv -i input1.avi -same_quant intermediate1.mpg avconv -i input2.avi -same_quant intermediate2.mpg cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg avconv -i intermediate_all.mpg -same_quant output.avi
ビデオの品質を保ちたいときには、中間および出力ファイルのために -same_quant
を使うか、適度に高いビットレートを指定するかするべきであることに注意して
ください。
プラットフォームがサポートしているなら、名前付きパイプの利点を生かして 巨大な中間ファイルを避けることができることにも注意してください:
mkfifo intermediate1.mpg mkfifo intermediate2.mpg avconv -i input1.avi -same_quant -y intermediate1.mpg < /dev/null & avconv -i input2.avi -same_quant -y intermediate2.mpg < /dev/null & cat intermediate1.mpg intermediate2.mpg |\ avconv -f mpeg -i - -same_quant -c:v mpeg4 -acodec libmp3lame output.avi
同様に、yuv4mpegpipe フォーマット、未加工ビデオ、および未加工オーディオコーデック
もまた結合を許し、かつコード変換ステップがほとんどロスレスです。
複数の yuv4mpegpipe を使う際には、最初の行は最初のストリーム以外すべて
捨てる必要があります。これは、次に見るように、tail
を通じてパイプする
ことによって達成できます。tail
を通じてパイプする際には
適切にバックグラウンドにするためコマンドのグループ化 { ;}
を使わなければ
ならないことに注意してください。
例えば、2つの FLV ファイルを1つの output.flv ファイルにつなげたいとします:
mkfifo temp1.a mkfifo temp1.v mkfifo temp2.a mkfifo temp2.v mkfifo all.a mkfifo all.v avconv -i input1.flv -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 - > temp1.a < /dev/null & avconv -i input2.flv -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 - > temp2.a < /dev/null & avconv -i input1.flv -an -f yuv4mpegpipe - > temp1.v < /dev/null & { avconv -i input2.flv -an -f yuv4mpegpipe - < /dev/null | tail -n +2 > temp2.v ; } & cat temp1.a temp2.a > all.a & cat temp1.v temp2.v > all.v & avconv -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \ -f yuv4mpegpipe -i all.v \ -same_quant -y output.flv rm temp[12].[av] all.[av]
avconv
は次のようなエラーを出力します
Undefined constant or missing '(' in 'baseline' Unable to parse option value "baseline" Error setting option profile to value baseline.
短い答え: ‘-profile’ の代わりに ‘-profile:v’ としてください。
長い答え: これは ‘-profile’ が映像にも音声にも適用されることがあるため 起こります。特に AAC エンコーダーはいくつかのプロファイルを定義しており、それらは どれも baseline という名前ではありません。
解決方法は、Stream specifiers
を使って ‘-profile’ オプションを映像ストリームだけに適用することです。
それに :v
を付け加えるとちょうどそうなります。
はい。Libav のドキュメントの the Developers Guide を読んでください。あるいは、 (http://ffmpeg.mplayerhq.hu/projects.html) にある Libav を既に組み入れている 多くのオープンソースプロジェクトのソースコードを調べてみてください。
場合によります。もしそのコンパイラが C99 準拠であれば、
そのコンパイラに関係した #ifdef
でソースコードを汚さないかぎり
それをサポートするパッチは歓迎される見込みがあります。
はい。Libav ドキュメンテーションの Microsoft Visual C++ の セクションを見てください。
はい、しかし Libav をコンパイルするのには 必ず Cygwin または MinGW ツールを使わなければなりません。 さらなる情報を見つけるには Libav のドキュメントの Windows の節を読んでください。
いいえ。これらのツールは膨らみ過ぎで、ビルドを複雑にします。
Libav は既に高いモジュール構成からなる方式で組織化されており、フォーマルなオブジェクト言語で 書き直す必要はありません。さらに、開発者の多くが純粋な C を好んでいます; 彼らにはそれでうまくいくのです。この題材についてさらなる議論をするには "Programming Religion" を読んでください。
はい、そのコードがオプションであり、簡単かつきれいに何も壊すことなく #if CONFIG_GPL で配置される限りは。 ですので、例えば新しいコーデックやフィルターは GPL でよいですが LGPL のコードへのバグ修正ならよくありません。
Libav は純粋な C のプロジェクトですので, そのライブラリを C++ アプリケーション内で使うには、
C のライブラリを使うと明示的に述べる必要があります。これは Libav の include を extern "C"
で
取り囲むことによってできます。
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3 を見てください。
Libav は C99 math 機能を使った C プロジェクトで、C++ でそれらを使えるように するには CXXFLAGS に -D__STDC_CONSTANT_MACROS を追加しなければなりません。
URLProtocol を実装しなければなりません。 Libav の ‘libavformat/file.c’ や Mpalyer のソースの ‘libmpdemux/demux_lavf.c’ を見てください。
make fate
は全てのテストを実行しないのですか?fate スイートのサンプルがあり、その正しいパスを SAMPLES
という Make での変数、
または FATE_SAMPLES
という環境変数、または --samples
という configure
のオプションで設定しているかどうか確かめてください。
make fate
はこのサンプルを見つけないのですか?サンプルのパスの中に home ディレクトリを示す文字 ~
がありませんか?
シェルがこれを展開できないところで使われているので、FATE はファイルを見つけられません。
~
をそのフルパスで置き換えてください。