web-dev-qa-db-ja.com

ffmpegを使用して.mp4ファイルを.3gpに変換するにはどうすればよいですか?

YouTubeからいくつかのビデオをダウンロードし、3gpに変換して携帯電話で再生できるようにします。 ffmpegを使用してこれを行う方法を知りたいです。

ネット上でさまざまな結果を試しましたが、次のエラーが発生しました。

  1. 私が使用した:

    ffmpeg -i dil.mp4 -sameq -ab 64k -ar 44100 dilenada.3gp
    

私が得た:

Unsupported codec for output stream #0.1

ストリーム0コーデックフレームレートがコンテナフレームレートと異なるようです:2000.00(2000/1)-> 29.92(359/12)

  1. 私が使用した:

    ffmpeg -y -i dil.mp4 -r 20 -s 352x288 -b 400k -acodec libfaac -ac 1 -ar 2000 -ab 24k dilenada.3gp
    

私が得た:

Seems stream 0 codec frame rate differs from container frame rate: 2000.00 (2000/1) -> 29.92 (359/12)

Unknown encoder 'libfaac'

何が間違っていますか?

7
harisibrahimkv

次のコマンドを使用します。

ffmpeg  -y -i movie.mp4 \
        -r 20 -s 352x288 -vb 400k \
        -acodec aac -strict experimental -ac 1 -ar 8000 -ab 24k \
        movie.3gp
8
Amin

おそらくlibavcodec-extra-53 libavformat-extra-53 libavutil-extra-51などのようなffmpegの非フリー/制限付きパッケージをインストールする必要があるだけです。

--list-encodersを指定してffmpegを呼び出すと、使用可能なエンコーダーが表示されます。

1
LiveWireBT

あなたはすべて正しいことをしています:)。変換を機能させるには、インストールする必要があります。

Ubuntu Restricted Extras、つまりlibavcodec-extra-53

ソフトウェアセンターから入手するか、次のコマンドを使用します。

Sudo apt-get install ffmpeg libavcodec-unstripped-52

1
b-ak

私もffmpegで問題に遭遇しました

どうやら、ubuntuはffmpegではなく、avconvと呼ばれるフォークを使用しています。これにより、サイトで見つかったいくつかの(多くの?)コマンドがUbuntuで使用できなくなります。

私がやったのは、元のffmpegを取得することでした:

Sudo add-apt-repository ppa:jon-severinsson/ffmpeg
Sudo apt-get update
Sudo apt-get install ffmpeg

しかし、これがあなたにどれだけ役立つかわからない

1
josinalvo

この問題を回避するための唯一のオプションは、build from sourceです。これで問題は解決しました。使用しようとしたシステムに現在あるffmpegパッケージのいずれかをアンインストールし、 この優れたUbuntuコンパイルガイドを使用 。これが、mp4やmp3などの独自形式にエンコードできる唯一の方法でした。

さらに、次のスクリプト(元の作成者の功績)を再度変更し、mp4 to 3gpまたはmp4 to mp3(オーディオを抽出するため)などを変換するために再度変更することができます。また、新しく変換されたファイルにファイルの元の名前が保持されます。ただし、オプションを正しく入力することが重要です。

3gpにはさまざまなオプションを使用できます。たとえば、qcif(176x144)とは異なる解像度が必要な場合がありますが、compiledバージョンのffmpegでこれらの設定が最初に機能することがわかりました。 (CPUの性能によっては、変換に時間がかかる場合があります。3gpに変換するとファイルサイズが大幅に削減されるため、変換の1つで314mbから13mbになります!)

以下のスクリプトを新しいドキュメントに保存し、実行可能(chmod +x)にし、目的のフォルダーに配置して実行します。または、ターミナルを使用して、スクリプトが入っているフォルダーと、ファイルを含むターゲットフォルダーを選択します。例えば~/Scripts/script ~/Downloads

#!/bin/bash
for f in *.mp4
do
    name="${f/.mp4/.3gp}"
    ffmpeg -i "$f" -vcodec h263 -s qcif -r 15 -b 100k -acodec libfaac -ac 1 -ar 32000 -ab 64k -f 3gp "$name"
done
0
user76204