質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

Q&A

解決済

2回答

3697閲覧

ffmpegによるmp4の動画ファイルからflacで音声ファイルを作りたいが実行時間が長い

sequelanonymous

総合スコア123

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

0グッド

1クリップ

投稿2019/04/09 10:33

現状、下記のようなシェルスクリプトを実行していますが、6分ぐらいの動画からflacの音声ファイルを作成するのにとても時間がかかります。本当はpythonのコード上で実行したいです。

ffmpegのラッパーpythonライブリを使うか、subprocess.callでCommandを呼び実行するかの二択似なりと思っています。
しかし、どうすれば早く複数の動画ファイルを一気に音声ファイルに変換するかで悩んでいます。
threadingかマルチプロセスで一気に複数のファイルへ変換させて時間を短縮できるか?みたいなざっくりとした考えは思い浮かぶもののあっているか、適切な方法かどうかの判断に困っています。
なにか、お気づきの点ありましたらご教示頂けませんでしょうか?

bash

1DIR=/xxx/xxxx/xxxx 2 3for file in `\find ${DIR} -type f -name *.mp4`; do 4 outfile=`echo $file | sed -e 's/mp4/flac/'` 5 echo $outfile 6 ffmpeg -y -i $file -ac 1 $outfile 7done

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ffmpeg-pythonを使ってmultiprocessingでシェルスクリプトを実行し、バッチで動かす。
それか、subprocessでシステムコールして、並列処理をさせる。

投稿2019/04/11 10:06

sequelanonymous

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

オプションに-vnを設定すれば動画を処理しなくなるため、実行時間が多少早くなるかもしれません。

また、音声をエンコードする必要がない場合は-acodec copyで元動画の音声をそのまま出力しますので、その分処理も早くなると思います。
ただし、元動画音声形式と出力音声ファイル拡張子の組み合わせが異なる場合は、抽出に失敗するので注意してください。

-threads <n>で使用するスレッド数を明示的に増やすのも効果的かと思います。

まとめると以下になります。
ffmpeg -y -vn -threads 4 -i $file -acodec copy $outfile

投稿2019/04/09 11:11

編集2019/04/09 11:23
y.nakamura

総合スコア190

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sequelanonymous

2019/04/09 12:13

コメントありがとうございます。1点、念の為確認させてください。 > 元動画音声形式と出力音声ファイル拡張子の組み合わせが異なる場合 というのは、どういう場合のことでしょうか?
y.nakamura

2019/04/10 00:35

`ffmpeg -i $file`とするとファイルのフォーマットが表示されて、その中の`Audio:`に続く文字で音声フォーマットを確認できます。、例えばaacだと、拡張子は.m4aが対応します。他にはmp3->mp3, vorbis->.ogg, flac->flacなどですね。
sequelanonymous

2019/04/10 02:01

ご回答ありがとうございます。やってみましたが、処理速度に変化はありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問