何百ものFLVファイルを含むディレクトリをバッチ変換して、各ファイルに同等のMP4が含まれるようにします。シェルスクリプトを記述してターミナルから実行することにより、このプロセスを自動化しようとしています。どうすればそれを行うことができますか?利用可能な手順のほとんどはffmpegを使用するLinux用ですが、OSXにはそれがないと思います。ありがとう。
6 に答える
HomebrewまたはMacPortsを介してffmpegをインストールできます。Homebrewでffmpegをインストールするコマンドはbrew install ffmpeg
; 同様に、MacPortsでffmpegをインストールするコマンドはsudo port install ffmpeg
です。ffmpegをインストールしたら、ファイルを変換するための簡単な(そしてややナイーブな)スクリプトを次に示します。必要なオプションによっては、フラグを追加する必要がある場合があります。
#! /bin/bash
function convert_all_to_mp4() {
for file in *.flv ; do
local bname=$(basename "$file" .flv)
local mp4name="$bname.mp4"
ffmpeg -i "$file" "$mp4name"
done
}
convert_all_to_mp4
上記のスクリプトを実行可能ファイルに入れたファイル(たとえば)を作成し、完全修飾パスで呼び出すか、それを含むディレクトリをPATH環境変数に追加して、指定した名前でスクリプトを呼び出します。chmod a+x path/to/convert_all_to_mp4.sh
ffmpegを使用したFLVからMP4への変換
目的: Bashスクリプトを使用して、複数のAdobe Flash Video(FLV)ファイルをMP4に変換します。
私の環境: MAC OS X 10.5.8、ターミナルv.240.2、Bash v.3.2.17(このソリューションはほとんどのApple Macシステムで動作するはずです)。
言語: bash
説明: このスクリプトは、指定された場所にあるすべてのFLVファイルを検索し、各ファイルを繰り返し処理して、同等のMP4ビデオに変換し、サブディレクトリMP4-yymmdd-HHMMSSに配置します。プロセス中に生成されたログファイルは、このサブディレクトリ内のログディレクトリに配置されます。
前提条件:
ffmpegバイナリをダウンロードして、/usr/local/bin
ディレクトリに配置します。
私のコードは、trick77.comのJanのブログに基づいています。詳細については、「参考資料」を参照してください。
「Bashスクリプト」セクションから私のbashスクリプトをダウンロードします。
私のコードの説明
- 存在するMP4ファイルをコピーします
- を使用してビデオコーデックタイプを検出し
ffmpeg -i [file]
ます。 - 各ビデオを循環し、使用するビデオコーデックのタイプに従って変換します。
- すべてのffmpegログファイルを連結します
FLV1およびH264コーデックを使用するビデオのみを処理します。
使用法:
convert-flv-to-mp4.sh [folder path]
例:
./convert-flv-to-mp4.sh /Users/Shared/Music
出力:MP4-yymmdd-HHMMSSサブディレクトリ
のmp4ファイル
ログ:
convert-flv-to-mp4.log.txt-プログラムログ
ffmpeg-yyyymmdd-HHMMSS.log.txt-変換された各ファイルのffmpegバイナリログ
ffmpeg.log.txt-上記のすべてのffmpegログのコンパイル
metadata.csv-各ビデオファイルのメタデータ
ディスカッション:最初の試みでは、 ffmpegオプション
を使用してFLV1ビデオストリームでビデオを変換できませんでした。-copy
代わりに、次のffmpegオプションを使用する必要がありました。
-strict experimental -b:a 64k
これは、変換がマイナーエラーで停止せず、64kオーディオビットレート変換を使用することを意味します。
この-copy
オプションを使用すると、入力ビデオがリマックスされるだけなので、高速です。そうしないと、ffmpegがファイルをトランスコードします。これにはかなり時間がかかります。このスクリプトは、使用するオプションを決定します。
コードの主要なスニペット:
ls ${inputdir}/*.flv>$inputlist
for i in $(cat $inputlist); do
...
case $vtype in
flv1)
ffmpeg -report -v info -nostdin -fflags discardcorrupt -i $i -strict experimental -c:v mpeg4 -b:a 64k ${outputdir}/${basename}.mp4
h264)
ffmpeg -report -v verbose -nostdin -fflags discardcorrupt -i $i -vcodec copy -acodec copy ${outputdir}/${basename}.mp4
esac
...
done
どこ:
inputlist-すべてのFLVファイルを含むファイル
vtype-入力ファイルのビデオコーデックタイプ
i-入力FLVファイル名
ログファイルの例:
メタデータログファイル:
結論:
完全なソリューションは、YouTubeからダウンロードされた73のFLVファイルで正常にテストされました。34ファイルのトランスコードと39ファイルのリマックスには、平均11MBのサイズで8分かかりました。
Bashスクリプト:
convert-flv-to-mp4.sh
参考資料:
FFmpegバイナリダウンロード
FFmpeg公式ドキュメント
Macで.flvFlashビデオを.mp4に変換する方法
拡張性:
FLV1またはH264以外のビデオストリームを含むFLVファイル(VP6、FLV4など)がある場合は、ビデオファイルへのリンクを含むコメントを追加してください。コードを更新して処理します。
#!/bin/bash
shopt -s nullglob
shopt -s nocaseglob
for file in *.flv
do
ffmpeg -i "$file" "${file%flv}mp4"
done
あなたはVLCでそれを行うことができます
http://wiki.videolan.org/Transcode#Transcoding_with_the_Command_Prompt
もう1つの選択肢は、非常に優れたバッチ機能を備えたMPEGStreamclipです。
find . -iname "*.flv" -exec ffmpeg -nostdin -fflags discardcorrupt -i "{}" -strict experimental -c:v mpeg4 -b:a 192k "{}.mp4" \;