9

何百ものFLVファイルを含むディレクトリをバッチ変換して、各ファイルに同等のMP4が含まれるようにします。シェルスクリプトを記述してターミナルから実行することにより、このプロセスを自動化しようとしています。どうすればそれを行うことができますか?利用可能な手順のほとんどはffmpegを使用するLinux用ですが、OSXにはそれがないと思います。ありがとう。

4

6 に答える 6

16

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

于 2010-08-20T05:13:25.923 に答える
10

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ファイル名

ログファイルの例:

ログファイルの例


メタデータログファイル:
ffmpegを使用してビデオから抽出されたメタデータ

結論:
完全なソリューションは、YouTubeからダウンロードされた73のFLVファイルで正常にテストされました。34ファイルのトランスコードと39ファイルのリマックスには、平均11MBのサイズで8分かかりました。

Bashスクリプト:
convert-flv-to-mp4.sh

参考資料:
FFmpegバイナリダウンロード
FFmpeg公式ドキュメント
Macで.flvFlashビデオを.mp4に変換する方法

拡張性:
FLV1またはH264以外のビデオストリームを含むFLVファイル(VP6、FLV4など)がある場合は、ビデオファイルへのリンクを含むコメントを追加してください。コードを更新して処理します。

于 2012-11-12T13:58:04.880 に答える
2
#!/bin/bash

shopt -s nullglob
shopt -s nocaseglob
for file in *.flv
do
  ffmpeg -i "$file" "${file%flv}mp4"
done
于 2010-08-20T05:23:23.053 に答える
1

あなたはVLCでそれを行うことができます

http://wiki.videolan.org/Transcode#Transcoding_with_the_Command_Prompt

于 2010-08-20T05:58:08.890 に答える
0

もう1つの選択肢は、非常に優れたバッチ機能を備えたMPEGStreamclipです。

于 2012-02-20T12:24:40.157 に答える
0
find . -iname "*.flv" -exec ffmpeg -nostdin -fflags discardcorrupt -i "{}" -strict experimental -c:v mpeg4 -b:a 192k "{}.mp4"  \;
于 2021-07-16T20:09:40.570 に答える