これはかなり些細なことのはずなのですが、どうしたらうまくいくのかがわかりません
私は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 libx264
は mpjeg
よりもはるかに小さいファイルを作成していることがわかりました(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