昔録った動画のアスペクト比を間違えて設定してしまってたので一括で16:9にしたかったのでやり方を調べました。
方法 $ ffmpeg -i movie.mp4 -c copy -aspect 16:9 movie_out.mp4 とこんな感じで出来ます。ちなみにある程度新しいffmpegじゃないとちゃんと動かないので新しいのを入れましょう。あとコンテナがアスペクト比の設定に対応してないともちろんダメです。
ちなみに私はWindowsで動かしました。
ffmpegを使って複数の音声と字幕から一つの動画を作成する方法。
ffmpeg.exe -i video.mp4 -i de.mp4 -i de_sw.mp4 -i fr.mp4 -i ru.mp4 -i de_co.mp4 -i de.srt -i en.srt -map 0:0 -metadata:s:v:0:0 language=ger -map 2:0 -metadata:s:a:1:0 language=ger -map 1:0 -metadata:s:a:0:0 language=ger -map 3:0 -metadata:s:a:2:0 language=fre -map 4:0 -metadata:s:a:3:0 language=rus -map 5:0 -metadata:s:a:4:0 language=ger -map 6:0 -metadata:s:s:0:0 language=ger -map 7:0 -metadata:s:s:1:0 language=eng -c copy -scodec mov_text out.mp4 コマンドの解説 まず入力ソースに使う動画は一つ一つに-iオプションを付けて呼び出します。
そして-map の横についてる数字は何個目の引数として呼び込まれたか:その動画や音声のどのストリームかを表しています。そして-metadataを使って音声や字幕の言語を指定するのですがこの時に映像・音声・字幕でそれぞれ別のストリームとして言語を設定しないといけません。これがわからずにかなりの時間を費やしてしまいました…。
ちなみに-acodec copy -vcodec copyという使い方をされてる人が多いですが-c copyで一括指定できます。
知っとくと便利なこと -t 数値で出力する長さを選べるのでちゃんと合成で来てるか確認したいだけの時は-t 180などして簡単に動画の確認だけすると良いでしょう。
ffmpegはなんでもできるし、どのOSでも使えるのに引数がめんどくさすぎるせいであまり情報がないのがもったいないですよね。
英語の勉強にアメリカドラマから音声を抜き出して、その中のサイレンス部分を削除したかったのでやり方を調べたらffmpegとsoxで簡単にできることがわかったので、その方法を紹介します。
動画から音声を抜き出す 一つの動画から音声を抜き出すときは
ffmpeg -i input.mp4 -vn output.wav で抜き出せるので
フォルダごとまとめて処理するには
find . -name '*.mp4' -exec ffmpeg -i '{}' -vn '{}'.wav ';' でフォルダ内の全ての.mp4の動画ファイルから.wavファイルが抜き出されます。-vnが no videoのオプションです。
他にも-acodec copy として音声ファイルを変換せずに抜き出すこともできます。
無音部分を自動検出して削除 次に無音部分を自動的に認識して削除するのにsoxを使います。やり方によっては.wav以外も認識するようにできるようなのですが、うちの環境ではできなかったので.wavで処理をしています。
find . -name '*.wav' -exec sox '{}' '{}'_remove_silence.wav silence 1 0.1 1% -1 0.1 1% ';' で先ほど作った.wavファイルから無音部分が全て削除されました。
wavをm4aに ffmpeg で変換 wavのままだとファイルがでかすぎるのでm4aに変換します。mp3でもいいんですが、m4aの方が圧縮効率がいいのでこちらを使います。
find . -name '*_remove_silence.wav' -exec ffmpeg -i '{}' '{}'.mp3 ';' 以上で変換終了です。
まとめ この3行を一括変換したいフォルダにcdで移動して実行すればOKです。.wavファイルは手動で削除しときましょう。rm *.wavでもいいですが。
上記は全てcygwin上で行ってますがもちろんLinuxでもMacでも動くはずです。
find .
作業目的 さくらのVPSで自動ダウンロードしてるNHKの語学講座が大量になってきて容量が馬鹿にならなくなってきたので
mp3で出力されたものをm4aに変換しようとNeroAAC Encoderのインストール作業メモ。
インストール方法 まず
コマンドラインツールをここからダウンロードしてくる。
http://www.nero.com/enu/company/about-nero/nero-aac-codec.php
wgetで直接取ってくるなら
$ wget http://ftp6.nero.com/tools/NeroAACCodec-1.5.1.zip
圧縮ファイルを展開して
$ unzip ~/NeroAACCodec-1.5.1.zip -d neroaac
実行権限を付加
$ chmod +x ./neroaac/linux/neroAac*
んで、動作を確認
$ ./neroaac/linux/neroAacEnc
************************************************************* * * * Nero AAC Encoder * * Copyright 2009 Nero AG * * All Rights Reserved Worldwide * * * * Package build date: Feb 18 2010 * * Package version: 1.5.4.0 * * * * See -help for a complete list of available parameters.