web-dev-qa-db-ja.com

MP3をYouTube対応のビデオ形式に変換する方法

私のウェブサイトには多くのMP3ファイルがあり、それらをYoutubeにアップロードすることにしましたが、残念ながら、YouTubeでは許可されていません。ビデオ形式のみが必要です。

これらのMP3をビデオに変換し、同じイメージセット(1つ以上のイメージ)を結果のビデオ形式に追加するにはどうすればよいですか。

個別にではなく、一括でこれを行う必要があります。数百のMP3ファイルがあります。

これは、WindowsベースまたはLinuxベースのアプリケーションです。

12
malhobayyeb

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

11
Mica

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」がなくても問題なく機能するので、それを使用することをお勧めします。

3
kecer

http://ubuntuforums.org/showthread.php?t=1686664 には、Ubuntuおよびその他のLinuxシステム向けのソリューションがいくつかあります。ほとんどはシェルコマンドまたは他のいくつかのクイックスクリプト言語で、すべてのMP3でループしてビデオファイルを出力できます。次に、YouTubeにアップロードする動画ファイルをキューに入れるだけです。ページにリストされているソリューションの中には:

  1. FFmpeg、次にファイルをYouTubeにアップロード
    _ffmpeg -loop 1 -i picture.jpg -i music.mp3 -shortest -acodec copy video.mp4_すべてのmp3ファイルに応じてループし、結果のすべてのビデオファイルをアップロードします。

  2. 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を使用し、引数として音楽と画像を受け入れます。

2
Caleb Xu

サブディレクトリで再帰的に変換します

次に、現在のディレクトリとそのサブディレクトリにあるすべての.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の場所を切り替えるまで機能しませんでした。

0
Antti Luode