web-dev-qa-db-ja.com

libavcodec-コーデックが見つかりません

Ffmpeg cドキュメントから this プログラムを実行しようとしています。正常にコンパイルされます。しかし、実行しようとすると「コーデックが見つかりません」と表示されます。以下のコマンドを使用してコンパイルしています。

gcc -o video_encode video_encode.c -lavutil -lavformat -lavcodec -lz -lm

このファイルを実行するには、次のコマンドを使用します。

./video_encode videoplayback mpeg-4

コーデックmpeg4を使用しました

./video_encode videoplayback mpeg4

結果を画像で見ることができます

結果を見るにはここをクリック

しかし、コーデック「mpeg-4」および「mpeg4」が見つからないことを示しています。使用可能なさまざまなコーデックを使用していますが、依然として同じ問題に直面しています。 ffmpeg libavcodecと他の関連ライブラリとubuntu 16.04 LTSの新しいバージョンをインストールしました。

これを助けてください。

1
emb-pro

「video_encode」をツリーの内外で構築していますか?後でlibavcodec-devをインストールする必要がある場合。前者の場合は、最初にffmpegソースをビルドする必要があります。 gccコマンドを使用してあなたに基づいて、私は木から推測します。

実際にはffmpegソースのencode_video.cという名前であることに注意してください(関係ありません。

ここでは、ツリー外のビルドで正常に動作し、予想されるエンコードを生成します(つまり、1秒。

例.

$ ./video_encode videotest.m4v mpeg4 Send frame 0 Send frame 1 Write packet 0 (size= 6467) Send frame 2 Write packet 2 (size= 3281) Send frame 3 Write packet 1 (size= 1874) Send frame 4 Write packet 4 (size= 3579) Send frame 5 Write packet 3 (size= 2069) Send frame 6 Write packet 6 (size= 4389) Send frame 7 Write packet 5 (size= 2204) Send frame 8 Write packet 8 (size= 3538) Send frame 9 Write packet 7 (size= 2348) Send frame 10 Write packet 10 (size=13024) Send frame 11 Write packet 9 (size= 2303) Send frame 12 Write packet 12 (size= 4718) Send frame 13 Write packet 11 (size= 2504) Send frame 14 Write packet 14 (size= 5082) Send frame 15 Write packet 13 (size= 1898) Send frame 16 Write packet 16 (size= 4186) Send frame 17 Write packet 15 (size= 1842) Send frame 18 Write packet 18 (size= 4676) Send frame 19 Write packet 17 (size= 1782) Send frame 20 Write packet 20 (size=12942) Send frame 21 Write packet 19 (size= 2237) Send frame 22 Write packet 22 (size= 5180) Send frame 23 Write packet 21 (size= 2312) Send frame 24 Write packet 24 (size= 4520) Write packet 23 (size= 2523)

enter image description here `

1
doug

H264コーデックを使用したいのですが、同様の問題が発生しました。 ffmpeg CLIで問題なくエンコードできたので、コーデックがマシンにインストールされていると確信していました。

問題を修正したのは、コーデックを検索する前にav_register_all()を追加することでした:

/* find the mpeg1video encoder */
codec = avcodec_find_encoder_by_name(codec_name);
// codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if (!codec)
{
    fprintf(stderr, "Codec '%s' not found\n", codec_name);
    exit(1);
}
// rest of the program...
1
user3707763

コンパイル

簡単なガイド:

Sudo apt-get install build-essential pkg-config
wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
./configure
make -j4 examples
  • これにより、現在のgit masterブランチのソースコードを使用してツリー内のすべてのサンプルがコンパイルされ、gccを使用するよりもエラーが発生しにくくなります。
  • compileおよびmakeコマンドの完了には数分かかります。
  • 詳細については、doc/examples/READMEを参照してください。
  • ダグが言及したように、問題の例はencode_video.cという名前です。

エンコーダー名

コーデック名はmpeg4(ハイフンなし)です。特定のビルドでサポートされているエンコーダー名のリストについては、ffmpeg -encodersを参照してください。

1
llogan