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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

FFmpeg

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

Q&A

解決済

2回答

3980閲覧

ffmpeg + java 一括変換はどうすればいいでしょうか

snakeriver

総合スコア76

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

FFmpeg

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

0グッド

0クリップ

投稿2016/03/24 13:59

編集2016/03/28 13:45

linuxにてffmpegでaiffが入っているフォルダをmp3に一括で変換したいのですが、
javaでバッチ処理のforコマンドを使うとエラーが出てしまいます。どうすればいいでしょうか。
windowsからtera termを使用し、linuxにて以下のコマンドを入力すると変換ができます。

for x *.aiff; do ffmpeg -i ディレクトリまでのパス/$x -ab 64k ディレクトリまでのパス/${x%aiff}mp3; done

しかし、以下のようにjavaの実行可能jarファイルをjava -jar jar名 で実行すると
"for"というディレクトリがないとエラーになります。

public class Aifftomp3{
//static final String FILEDIRECTORY = "ディレクトリまでのパス";

public static void main(String[] arg){ ArrayList<String> cmd = new ArrayList<String>(); cmd.add("for"); cmd.add("x"); cmd.add("*.aiff;"); cmd.add("do"); cmd.add("ffmpeg"); cmd.add("-i"); cmd.add("ディレクトリまでのパス/$x"); cmd.add("ディレクトリまでのパス/${x%aiff}mp3;"); cmd.add("done"); System.out.println(cmd.toString()); ProcessBuilder converter = new ProcessBuilder(); converter.command(cmd); try { converter.start(); } catch (Exception e) { e.printStackTrace(); System.out.println(e); } }

}
後、ファイルの名前、変更後の名前をstatic final Stringとかでメンバ変数にしたいのですが、
単一のファイル変換でもできませんでした。

こちらもどうすれば変換できますか。

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

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

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

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

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

yohhoy

2016/03/24 14:35 編集

この処理にJavaを使う必然性はあるのでしょうか?(処理内容的にJavaが有利な内容でもないため)
退会済みユーザー

退会済みユーザー

2016/03/24 14:49

シェルスクリプト組んだ方が早くないですか...?
guest

回答2

0

自己解決

シェルスクリプトのforをcmd.addせず、
javaでファイルの中身を取得し
File files[] = directory.listFiles();
List に格納し、for文で回して元のファイル名と変換後のファイル名のコマンドは以下のようにし、
cmd.add(ディレクトリのパスの変数+ファイルの名前を抽出した変数+".拡張子");
process のwaitFor();を記述することにより、javaの記述でlinuxにあるffmpegで一括変換出来ました。
みなさんのコメントにより理解が高まり、解決に導けました。ありがとうございます。

投稿2016/03/28 13:54

編集2016/03/28 13:55
snakeriver

総合スコア76

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

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

0

ProcessBuilderは外部コマンドを実行するためのものです。
cmd.exeの内部構文であるforやdirやechoなどは、cmd.exeを起動した内部で
スクリプトとして認識してくれるものです。

したがって外部コマンドとして動かす場合は、cmd.exe /c を必ず手前にいれるようにしましょう。

また、実行内部では環境変数が認識されていない状態ですので、ご認識ください。


以下実際のヘルプの一部を転載します。

Windows コマンド インタープリターの新しいインスタンスを開始します。

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]

[[/S] [/C | /K] 文字列]

/C "文字列" に指定されたコマンドを実行した後、終了します。


他の方の回答にもありましたが、javaで必ず行わなければならない要件でもない限りは、
バッチファイル作成のご検討していただければと思います。

[追記]
linuxの文言を見逃しました。
linuxではお使いの環境のbash場合は、bash -c を入れるようにしてください。
事前に、echo $SHELLでお使いの環境のログインスクリプトがわかります。

投稿2016/03/24 21:51

編集2016/03/26 04:03
lib

総合スコア446

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

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

yohhoy

2016/03/25 02:46

質問によれば対象OSはlinuxのようですが、回答内容はそのまま適用できますね。(cmd.exe → sh、バッチファイル→シェルスクリプト と読み替え)
snakeriver

2016/03/28 13:42

linux なので、cmd.exe は完全に使えません。bash -cでは試していないです。シェルスクリプトでなく、javaで今回作ろうとしています。 しかしながら、libさん、yohhoyさん、ありがとうございます。理解度が高まりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問