1つの画像(jpg)と1つのオーディオファイル(MP3)があり、これをビデオファイル(たとえばAVI)として出力したいと思います。
FFMPEGを使用して2つを結合する方法を知っている人はいますか?音声の長さで画像を表示したいのですが。
誰かアイデアはありますか?
Windowsを使用している場合は、Windowsムービーメーカーでも実行できます...手順が必要な場合は、コメントを残してください
FFmpegの場合はこれを使用してください
ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30
-b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4
vframes 14490は、audio.mp3ファイル全体の連続画像を作成するためにループする必要のあるフレーム数です。
例:8分3秒((8m x 60s + 3s)x 30fps = 14490 vf)
ここで提案されている方法よりもはるかに簡単な方法があり、フレーム数を計算したり、個々のファイルの長さを入力したりする必要はありません(特にバッチ処理に適しています)。最近のバージョンのffmpegでは、-shortest
オプションを使用できます。これは、最短のストリームが終了するとエンコードを停止します。この場合、input.mp3(画像は永久にループするため、長さは無限です)。
ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4
これは、画像/ビデオに1秒あたり2フレームを使用します。これは問題ないはずですが、必要に応じて、より標準的な25に設定できます。
スバンキはほぼ正しかった。動作するコマンドラインは次のとおりです。
ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
プロンプトを表示せずに出力ファイルを上書きする
オプション「-loop_input」は非推奨であり、-loop 1を使用します。 ffmpegドキュメント を参照してください。
入力ファイル
1秒あたりのフレーム数
次のように表すこともできます:-r 30000/1001、fpsが29.97nnn
ビデオビットレート;数値が大きいほど、品質が高くなり、ファイルサイズが大きくなります。
上で説明したように;オーディオファイルの合計時間を秒単位で取得します(例:00:02:41(2分41秒)は合計161秒(2 x 60)+ 41に相当します)。次に、合計秒数に、-rで指定した1秒あたりのフレーム数を掛けます(例:161 x 30 = 4830)。
-vframesは-t161に置き換えることができます(-tデュレーションレコードまたはオーディオ/ビデオのトランスコード「デュレーション」秒)
作成するファイルのタイプに適したオーディオコーデックを使用してください。 .mp4の場合は、AAC形式である必要があります。コーデックlibvo_aacencは、私のWindows7システムの正しいエンコーディングコーデックでした。
オーディオビットレート
これは、出力ファイルの名前です。システムの任意の正当なファイル名にすることができます。この拡張機能は、-vcodecを使用して指定しない場合、ffmpegが適切なビデオコーデックを決定するのに役立ちます。
AUTOMAGICALLYがディレクトリ内の$ AUDIO拡張子のすべてのファイルをfolder.jpgイメージが埋め込まれたディレクトリ内の10FPSmp4ビデオファイルにエンコードする単純なbash/cygwinスクリプト。
youTubeのアップロードに便利です;)
AUDIO=m4a;
$'\n'; for a in `ls -1 *.$AUDIO `; do ffmpeg -i $a &2> $a.info ; done;
cat '' > do.sh
IFS=$'\n';
for a in `ls -1 *.$AUDIO`; do D=`grep Duration $a.info | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1 | head -n1 `; S=$(( $( echo $D | cut -d':' -f2 ) * 60 + 1 + ` echo $D | cut -d':' -f3 ` )) ; echo ffmpeg -loop_input -vframes $(( $S * 10 )) -i folder.jpg -i \"$a\" -y -r 10 -b 2500k -ab 384k -vcodec mpeg4 \"$a.mp4\" >> do.sh; done;
split -l5 do.sh
xa* &
ダウンロード VirtualDub 、次にこれを行います:
通常のビデオファイルを開くのと同じように画像を開きます。
音声の長さを秒単位で計算し、最も近い1秒に切り上げます(たとえば、78.34秒は79秒になります)。これ以降、この値をxと呼びます。
「ビデオ>フレームレート」に移動し、「フレームレート(fps)に変更」を選択し、値として「1/x」を入力します。さらに、25 fpsのような通常のフレームレートを結果のファイルに含めたい場合は、[fpsに変換]を選択し、そこに必要なフレームレートを入力します。
「ビデオ>圧縮」を選択し、お好みのフレーバーを選択してください。サイズ変更フィルターを使用して画像のサイズを調整する必要がある場合があります。
「オーディオ>他のファイルからのオーディオ」に移動し、そこでオーディオを選択します。必要に応じて、オーディオの圧縮を選択します。
ファイルを保存します。
ソース: stephanV