私のウェブサイトには多くのMP3ファイルがあり、それらをYoutubeにアップロードすることにしましたが、残念ながら、YouTubeでは許可されていません。ビデオ形式のみが必要です。
これらのMP3をビデオに変換し、同じイメージセット(1つ以上のイメージ)を結果のビデオ形式に追加するにはどうすればよいですか。
個別にではなく、一括でこれを行う必要があります。数百のMP3ファイルがあります。
これは、WindowsベースまたはLinuxベースのアプリケーションです。
FFmpegを使用してYouTubeの静止画像でオーディオをエンコードする方法についての情報 こちら と、Windowsで一括変換を行うためのアドバイス こちら があります。
エンコーディングに関しては、これが機能することがわかりました:
ffmpeg -loop 1 -r 1 -i pic.jpg -i audio.mp3 -c:a copy -shortest -c:v libx264 output.mp4
-c:v libx264
エンコードすると、出力ファイルのサイズが大幅に減少します。 https://superuser.com/a/1472572/128124
pythonスクリプトの代わりに単純なbashワンライナーを検討することもできます-
for i in *.mp3; do ffmpeg -v quiet -i "picture.jpg" -i "$i" -shortest -acodec copy "`sed 's/mp3/mp4/g'<<<$i`"; done
これにより、現在のディレクトリにあるすべてのmp3ファイルが、picture.jpgを含むmp4ビデオに変換されます。
Flacをmp3に変換する場合
for i in *.flac; do ffmpeg -v quiet -i "$i" -ab 320k -ac 2 -ar 48000 "`sed 's/flac/mp3/g'<<<$i`"; done
"-v quiet"に注意してください。これにより、ffmpegの大口が閉じられ、$ iとsed
も二重引用符で囲まれます。これにより、スペースを含むファイル名で失敗しなくなります。
ヒント:ビデオへの変換にはかなり時間がかかります(少なくとも私にとって)。 -threads 4を使用してみてください(もちろん他の値です。シングルコアCPUでは意味がありません)。
編集:「-loop 1」(他の人が推奨)は、実際には無限のループ(驚くべきことです)を作成することがわかりました。私のジェンツーでは、それはあなたのおいしい一口をすべて食べることを意味します。 「-loop 1」がなくても問題なく機能するので、それを使用することをお勧めします。
http://ubuntuforums.org/showthread.php?t=1686664 には、Ubuntuおよびその他のLinuxシステム向けのソリューションがいくつかあります。ほとんどはシェルコマンドまたは他のいくつかのクイックスクリプト言語で、すべてのMP3でループしてビデオファイルを出力できます。次に、YouTubeにアップロードする動画ファイルをキューに入れるだけです。ページにリストされているソリューションの中には:
FFmpeg、次にファイルをYouTubeにアップロード
_ffmpeg -loop 1 -i picture.jpg -i music.mp3 -shortest -acodec copy video.mp4
_すべてのmp3ファイルに応じてループし、結果のすべてのビデオファイルをアップロードします。
Python、mp4に変換してからYouTubeにファイルをアップロード
_
#! /usr/bin/env python
__
import sys, os
__
inputOne = sys.argv[1]
_ _inputTwo = sys.argv[2]
__
for i in sys.argv[1:]:
_ _if '.mp3' in i:
_output = i.replace('mp3','mp4')
_
cmd = 'ffmpeg -loop_input -i "'+inputOne+'" -i "'+inputTwo+'" -shortest -acodec copy "'+output+'"'
_
os.system(cmd)
また、ffmpegを使用し、引数として音楽と画像を受け入れます。
サブディレクトリで再帰的に変換します
次に、現在のディレクトリとそのサブディレクトリにあるすべての.mp3
をmp4に変換する単純なfind
バージョンを示します。
find . -iname *.mp3 | sort | while IFS="" read -r f; do
ffmpeg \
-nostdin \
-loop 1 \
-r 1 \
-i image.jpg \
-i "$f" \
-vcodec libx264 \
-acodec copy \
-shortest \
"$(basename "${f%.*}.mp4")" \
;
done
テストデータを取得します。
wget -O image.jpg https://upload.wikimedia.org/wikipedia/commons/8/83/Lama_Portrait_06072007_01.jpg
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/4/4f/BackUpAndPush.ogg
ffmpeg -i audio.ogg audio.mp3
アップロードされた出力: https://www.youtube.com/watch?v=tv3a6kP6BDA
画像サイズが2の倍数でないとffmpeg
が不平を言う場合(libx264
に必要)、最初にImagemagickで画像サイズを見つけることができます:
identify image.jpg
次に、幅と高さの両方を均等になるように丸めます。サイズが1023x513の場合、次のように使用します。
convert image.jpg -resize 1024x512! imag2.jpg
ここで、!
はそのサイズを強制的に使用します: https://unix.stackexchange.com/questions/319504/force-graphicsmagick-to-resize-image-to-specific-width
Ffmpegが標準入力からバイトを読み取り、read
!!!を壊すため、-nostdin
が必要です https://stackoverflow.com/questions/52374260/bash-variable-changes-in-loop-with-ffmpeg
-vcodec libx264
を使用すると、最終的なビデオサイズが大幅に縮小され、元のMP3のサイズに大幅に近づきます。デフォルトのビデオコーデックの方がはるかに悪いようです。キーフレームを少なくすることで、サイズの増加をさらに減らすことができる可能性があります: https://stackoverflow.com/questions/30979714/how-to-change-keyframe-interval-in-ffmpeg サンプルデータでは、3分の3 MB MP3に+3 MB、1.1 MBの画像がありました。
参照: FFmpegを使用して1つの画像+ 1つのオーディオファイルを結合し、1つのビデオを作成する
音声の手続き型ビデオ表現
ffmpegは非常に機能が豊富で、次の形式のコマンドを使用して、オーディオのいくつかのビデオ表現を生成できます。
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]avectorscope=s=1920x1080,format=yuv420p[v]" \
-map "[v]" -map 0:a avectorscope.mp4
ここでavectorscope
は特定の表現タイプです。
そのようなフォーマットの便利なリストは次のとおりです: https://Gist.github.com/seyoum/4455e9bed74241bfbd640a8083fd38b3 これらはすべて http: //ffmpeg.org/ffmpeg-filters.html#Multimedia-Filters
参照: オーディオファイルからビデオファイルを作成し、オーディオから視覚化を追加する
Ubuntu 19.04、ffmpeg 4.1.3でテスト済み。 2019年8月現在、ファイルはYouTubeに正常にアップロードされています。
Mp3ファイル(またはエンコードしたいものは、オーディオ形式を適宜変更してください)を1つのフォルダーにコピーします。また、ffmpegのインスタンスを、herringbone.jpg
というタイトルのカバー画像とともに挿入します。
次に、CMDに移動し、フォルダに移動します。
これをコピー:
for %a in (*.mp3) do "ffmpeg" -loop 1 -r 1 -i "Herringbone.jpg" -vcodec mpeg4 -i %a -acodec copy -shortest %a".mp4"
(CMDウィンドウに貼り付けるには、左上のcmd行ウィンドウをクリックします。編集/貼り付けを選択します。)
Enterキーを押します。
最新バージョンのffmpegエンコーダーで動作します(4.1.1)
ビデオ形式も変更できると思います。 mp4から好きなものに変更し、ffmpegがサポートするものに変更してください。
別のフォーラムでこれを見つけましたが、スクリプトで-shortest
の場所を切り替えるまで機能しませんでした。