1つの画像と1つのオーディオファイルを結合して、FFmpegを使用して1つのビデオを作成するには、1つの画像と1つのオーディオファイルを結合する

audio ffmpeg images video

これはかなり些細なことのはずなのですが、どうしたらうまくいくのかがわかりません

私はFFmpegが1つのJPEG画像と1つの音声ファイルを入力として取り、音声ファイルと同じ長さの動画ファイルを生成するようにしたいのですが、(静止画像を全体の長さにストレッチすることで)、このような場合はどうすればいいのでしょうか?

出力にどのビデオコーデックが使われているかはあまり気にしていませんが、「コピー」を音声コーデックとして使えること(つまり、音声ストリームをトランスコードせずにコピーできること)が肝心です

そんなことをしてくれる正しいコマンドラインとは?

I tried:

ffmpeg -i image8.jpg -i sound11.amr -acodec copy test.avi

と、-s 640x360, -loop_input, -shortest, -t xxx, -r 0.1 (動画が長くなることを期待して、人為的にフレームレートを低くした) と -f image2 の組み合わせをたくさん試してみました

エラーが発生するか、1フレームの動画ファイルを取得するかのどちらかです

ググってみたが、いくつもの解決策を見つけたが、どれもうまくいかなかった

誰か作業中のコマンドを提案して、その根拠を説明してくれませんか?

  214  matteo  2011-05-04


ベストアンサー

コマンドラインのオプションの順番は重要です。私の場合は以下のようになります

ffmpeg -loop 1 -y -i image8.jpg -i sound11.amr -shortest -acodec copy -vcodec mjpeg result.avi

より一般的なケースでは、the FFmpeg wiki から引用した以下のコマンドを使うことができます

ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest out.mp4

これは libx264 エンコーダーを使用し、上記で使用した MJPEG コーデックよりも優れた圧縮を提供します。音声はAACで、内蔵のffmpeg AACエンコーダを使用します

174  community wiki  2018-09-01


あなたはそれが必要とされるよりもはるかに困難にしています。FFmpeg はあなたが評価しているよりもずっと賢いです – あなたがビデオをオーディオトラックと同じ長さにしたいことを知っています

ffmpeg -i still.png -i narrate.wav -acodec libvo_aacenc -vcodec libx264 final.flv

pause

指定しなければならない属性は input filenames, output codecs, output filename だけです (この中には output container, が含まれています)

もちろん、最終的な動画と同じ寸法の静止画から始めるのは理にかなっています。FFmpegの出力寸法を指定するのではなく、専用の画像エディタを使用している場合は、入力寸法が偶数であることを確認する必要があります

出力サイズは FFmpeg の最も一般的な問題の一つです。いくつかのコーデックは他のコーデックよりも出力サイズが制限されていますが、奇数の高さや幅の属性を持つ出力はありません

バッチファイルの最後にある pause コマンドは CLI を開いたままにしておきます — コマンドラインをデバッグする最良の方法は、それが生成するエラーメッセージを読むことです。これらは非常に特殊なもので、FFmpeg には最高のドキュメントがありますが、エラーメッセージを読む前にウィンドウを閉じてしまうと、開発者の苦労が無駄になってしまいます

コマンドシェルにはスイッチ cmd /k があり、コマンドプロンプトでバッチスクリプトから同じ命令を実行できるオープンウィンドウを維持しています

FFmpeg と avconv はどちらも最終的には -c:a-acodec に、-c:v-vcodec に使用するようになりますが、私が使用しているビルドでは古い命令でも問題なく動作します

Nota Bene: すべてのコミットには固有の特徴があります。コマンドラインが明らかな理由なく失敗している場合、別のビルドを試すか、FFmpeg の開発者がここ数年最も活発に活動している libav へのフォークオーバーに従うことが役に立つことがよくあります。彼らのトランスコーディングツールは avconv という名前に変更されましたが、あなたのバッチファイルはどちらでも動作するはずです

44  community wiki  None


Even easier:

ffmpeg -i ep1.png -i ep1.wav ep1.flv

FFmpegは出力ファイルの拡張子に応じて、最適なコーデックを自動的に選択しようとします

更新:私はYouTubeがビデオを処理する難しさを持っていることに気づいた(95%で立ち往生する)私は1つのフレームがあるためだと思います。YouTubeを幸せにするために私が見つけた解決策:より多くのフレームを追加します。また、私はオーディオ品質を維持するために-acodec copyを追加しました。-shortestがないと永遠にループしてしまいます。(画像のループは無限に続くので、音声である最短ストリームの最後で停止します)。フィルタ (など) は指定した順番で処理されるので、オプションの順番は速度を上げるために非常に重要です。これらのパラメータの順番を変えると、結果が劇的に変わります

ffmpeg -r 1 -loop 1 -i ep1.jpg -i ep1.wav -acodec copy -r 1 -shortest -vf scale=1280:720 ep1.flv

また、私はフレームレートを2回設定していることに気づいてください、それは事故ではありません – 最初のフレームレートは入力のためのものであり、2番目は出力のためのものです。最初のフレームレートは入力用で、2番目のフレームレートは出力用です。これを正しく行えば、ビデオの1秒あたり1フレームしかないはずです。また、私はここで解像度を720pに設定しましたが、これはYouTubeでHDオーディオを取得する必要があることを意味します。)

41  PJ Brunet  2014-05-26


私には効いたバージョン

 ffmpeg -loop 1 -y -i pic.jpg -i sound.amr -shortest video.mp4

オプション-shortestは出力ファイルの前になければならないので、チェックアウトしてみてください

オプション shortest (最短入力でエンコーディングを終了) は入力ファイル pic.jpg には適用できません — 入力オプションを出力ファイルに適用しようとしているか、あるいはその逆です。このオプションは、それが属するファイルの前に移動させてください。入力ファイル pic.jpg の解析オプションのエラー

18  fguillen  2015-01-28


ffmpegのマニュアルページより

ffmpeg [[infile options][-i infile]]... {[outfile options] outfile}...

ご存知のように、ファイル内のオプションは、それらが適用されるファイルの前になければなりません

しかし、これはバグではありません

8  ComputerDruid  2011-05-22


これは私のために働きました

ffmpeg -loop 1 -shortest -y -i image.jpg -i audio.mp3 -acodec copy -vcodec libx264 video.avi

vcodec libx264mpjeg よりもはるかに小さいファイルを作成していることがわかりました(100MBではなく10MB)

5  Colonel Panic  2014-04-15


ここではその全容を説明します

ffmpeg -i image.jpg -i audio.mp3 -c:v libx264 -tune stillimage -c:a copy out.mp4
  • -i image.jpg -i audio.mp3:画像と音声の入力

  • -c:v libx264: x264を使ってビデオをエンコードする

  • -tune stillimage:動画を静止画エンコードに最適化するためのx264設定

  • -c:a copy: 入力オーディオに使用されるコーデックをコピーします。別のオーディオコーデックを使用したい場合は、これを変更することができます

私は-loop 1-shortestは使っていません。-loop 1 はエンコードが大幅に遅くなり、ファイルが大きくなります。-loop 1を使わずに-shortestを使うと、動画が1フレームの長さになってしまうので、-loop 1を使うべきではありません。しかし、YouTube は 1 フレームの動画を好まないので(PJ Brunet の回答を参照)、両方のオプションを使用する必要があります

5  qwr  2019-11-06


私は @matteo のようにしようとしていましたが、オーディオなしで、@Colonel Panic の解決策が最もうまくいきました

ffmpeg -loop 1 -shortest -y -i still.png -vcodec libx264 -t 10 video.avi

持続時間の引数を秒単位(-t 10)で追加するだけでした

2  None  2014-09-18


誰かがそれらをバッチ変換したい場合には、これを試してみてください

あなたは、入力と出力のフォルダを設定することができます。この場合、私はそれをAVIに設定します

この回答1つの画像+1つの音声ファイルを組み合わせて、FFmpegを使って1つの動画を作ることができました

 @echo off
set "sourcedir=C:\Users\CodeHard\Desktop\BOX\Newfolder"
set "outputdir=C:\Users\CodeHard\Desktop\BOX\Converted"

PUSHD "%sourcedir%"

for %%F in (*.mp3) DO ffmpeg -r 1 -loop 1 -i abc.jpeg -i "%%F" -acodec copy -r 1 -shortest -vf scale=1280:720 "%outputdir%\%%F.avi"

POPD

1  Suraj Jain  2017-07-12


PJ Brunetさんの回答からのクローン

ffmpeg -r 1 -loop 1 -y -i 1.jpg -i 1.m4a -c:a copy -r 1 -vcodec libx264 -shortest 1.avi

これにより、最小サイズ(18MB)と最速のエンコーディング時間(17MB m4aファイルでは2秒しかかかりませんでした)が得られました

1  Kokizzu  2019-11-08


ffmpeg -loop 1 -i img.jpg -i audio.wav -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest out.mp4

0  None  2014-07-22


この記事で紹介されている-pix_fmt yuv420pを含むいくつかのコマンドを組み合わせて、Quicktime (Mac)で動作することを確認してみました

ffmpeg -loop 1 -y -i image.jpg -i music.mp3 -shortest -pix_fmt yuv420p output.mp4

私にとっては、これはmacOSで完璧に動作しました

0  Hay  2019-11-03


このコマンドを試してみてください。私の場合はうまくいきました

-y -i /storage/emulated/0/images.jpg -i /storage/emulated/0/audio.wav -acodec aac -vcodec mpeg4 -s 480*320 -f mp4 -r 2 /storage/emulated/0/output.mp4"

-1  Phani varma  2016-05-24


タイトルとURLをコピーしました