オーディオと画像を結合-> FFmpegを使用してビデオとして出力


8

1つの画像(jpg)と1つのオーディオファイル(MP3)があり、これをビデオファイル(たとえばAVI)として出力したいと思います。

誰もがFFMPEGを使用して2つに参加する方法を知っていますか?音声の持続時間の間、画像を表示したいと思います。

誰かアイデアはありますか?


使用しているOs
subanki

回答:


6

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)

ここからリソース


こんにちはSubanki-コメントありがとうございます!! 私にはわかりませんが、音声と画像から動画ファイルを出力する必要があります。これはどのように行うのですか?
user41559

@nayrsllewコードが機能しないことがわかりました。申し訳ありませんが、基本的にはffmpeg -f image2 -i image%d.jpg video.mpgを使用してビデオに変換し、ビデオとオーディオを結合します
subanki

私の答えを更新しました、それは
困難でした

正解です。なぜ反対票:(
subanki

こんにちはカント、ここで私を助けてくれませんか。結果のビデオは大きすぎます。ビデオと同じサイズのmp3ファイルが必要です。画像ファイルが非常に小さい。また、この動画をYouTubeにアップロードする必要があります。
Parminder

7

ここで提案されている方法よりもはるかに簡単な方法があり、フレーム数の計算や個々のファイルの長さの入力を必要としません(特にバッチ処理の場合)。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

これは画像/ビデオに毎秒2フレームを使用しますが、これは問題ありませんが、必要に応じてより標準的な25に設定できます。



5

スバンキはそれをほぼ正しかった。動作するコマンドラインは次のとおりです。

ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
-y

プロンプトなしで出力ファイルを上書きする

-ループ1

オプション '-loop_input'は非推奨の使用-loop 1です。ffmpegのドキュメントを参照してください。

-私

入力ファイル

-r

1秒
あたりのフレーム数は、次のように表すこともできます。-r 30000/1001は、29.97nnnのfpsを示します。

-b:v

ビデオビットレート; 数値が大きいほど品質が高くなり、ファイルサイズが大きくなります。

-vframes

上記で説明したように; オーディオファイルの合計時間を秒単位で取得します(たとえば、00:02:41(2分41秒)は、合計161秒(2 x 60)+ 41)です。次に、合計秒数に-rで指定した1秒あたりのフレーム数を掛けます(例:161 x 30 = 4830)。

-vframesは、-t 161に置き換えることができます(-t持続時間レコードまたはオーディオ/ビデオの「持続時間」秒のトランスコード)

-コーデック

作成するファイルのタイプに適したオーディオコーデックを使用してください。.mp4の場合は、AAC形式である必要があります。コーデックlibvo_aacencは、私のWindows 7システムに適したエンコードコーデックでした。

-ab

オーディオビットレート

結果.mp4

これは出力ファイルの名前です。システムに適した任意のファイル名を使用できます。拡張機能は、-vcodecを使用してビデオコーデックを指定しない場合、ffmpegが適切なビデオコーデックを決定するのに役立ちます。


1

ディレクトリ内の$ AUDIO拡張子のすべてのファイルを、folder.jpg画像が埋め込まれたディレクトリ内の10FPS mp4ビデオファイルに自動的にエンコードする単純な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* &

0

VirtualDubをダウンロードして、次の手順を実行します。

  1. 通常のビデオファイルを開くように画像を開きます。

  2. 秒単位でオーディオの継続時間を計算し、最も近い整数秒に切り上げます(たとえば、78.34秒は79秒になります)。この値は今後xと呼ばれます。

  3. 「ビデオ>フレームレート」に移動し、「フレームレート(fps)に変更」を選択して、値として「1 / x」を入力します。さらに、結果のファイルに25 fpsなどの通常のフレームレートを設定する場合は、[fpsに変換]を選択し、そこに必要なフレームレートを入力します。

  4. 「ビデオ>圧縮」を選択し、好みのフレーバーを選択します。サイズ変更フィルターを使用して画像のサイズを調整する必要がある場合があります。

  5. 「オーディオ>他のファイルからのオーディオ」に移動し、そこでオーディオを選択します。必要に応じて、オーディオの圧縮を選択します。

  6. ファイルを保存します。

出典:stephanV


おかげでStephanV ..私はFFMpegを使用する必要がありますが、これは良い提案です...ありがとう
user41559
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.