ffmpegでmkvをmp4にした
動画を以下の様に映像は無変換でmkv(FLAC/AVC)からmp4(AAC/AVC)にしたい
今回はffmpegを使うことにする
ffmpeg
FFmpeg(エフエフエムペグ)は動画と音声を変換することのできるUNIX系OS生まれのフリーソフトウェアであり、libavcodec(動画/音声のコーデックライブラリ)、libavformat(動画/音声のコンテナライブラリ)、libswscale(色空間・サイズ変換ライブラリ)、libavfilter(動画のフィルタリングライブラリ)などを含む。ライセンスはコンパイル時のオプションによりLGPLかGPLに決定される。コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能なため、幅広く利用されている。
via FFmpeg - Wikipedia
やってみる
ffmpegで普通に変換したらMPEG Audioになって音が曇った感じになってしまった
いろいろ調べて今のところ最適なオプションにたどり着いた
DIRPATH=$1 for FILE in ${DIRPATH}*.mkv do ffmpeg -i "${FILE}" -vcodec copy -acodec aac -strict experimental -ab 128k -aprofile aac_low -ac 2 -ar 44100 "${FILE%.mkv}.mp4" done
変換するファイルが複数だったので初めてシェルスクリプト使った
変換するファイルのあるディレクトリで実行するとmkvのファイルだけをmp4に変換してくれる
雑感
参考ページ
AppleScriptでtell 内で他の関数を呼ぶ
on run tell application hello() end tell end run on hello() log "Hello World" end hello
このままだと Can’t get hello of application. と言われてしまうので
tell application hello() of me end tell
とすることでtell内で他のハンドラを呼ぶことができた
参考ヘージ
ApppleScriptを触る(2)
AppleScriptを使ってカンマで区切られているテキストをレコードに読み込むハンドラを書いてみた
与えるテキスト
,item-A,item-B,item-C,item-A,item-B,item-C,item-A,item-B,item-C,item-A,item-B,item-C,
こんな感じで3種類の文字列をカンマで区切ります これを適当な場所にtest.txtという名前で保存します
プログラム
-- ファイルの場所を指定 set dpath to "/Users/UserName/Documents/" set theRecode to read_log(dpath) ----------------------------------------------- on read_log(dpath) --logファイルのパスを作成 set fileName to "test.txt" set readFile to dpath & fileName --ファイルを文字列として読み込む open for access readFile without write permission set myContents to read readFile as «class utf8» close access readFile get myContents --カンマ区切り文字列をリストに代入 set myList to read_cvs(myContents) set myListNo to count myList set recordNo to (myListNo / 3) (* recodeNo回リピートする 値の代入はmyListNoを使う 1回リピートするごとにcounterを3プラスする *) set counter to 1 set theRecode to {} repeat recordNo times set a to item (counter + 0) of myList --myListのi+0個目をaに代入 set b to item (counter + 1) of myList --myListのi+1個目をbに代入 set c to item (counter + 2) of myList --myListのi+2個目をcに代入 copy {aName:a, bName:b, cName:c} to the end of theRecode set counter to counter + 3 end repeat return theRecode end read_log --カンマ区切りテキストをリストで返す ----------------------------------------------- on read_cvs(source_text) set comma_p to findText(source_text, ",") as list --カンマの場所を探索 --カンマの個数を取得 set commas_no to count comma_p --cvsコンテンツを格納するリストを作成 set cvs to {} --カンマの個数回ループ repeat with i from 1 to (commas_no - 1) set s to (item i of comma_p) --i個目のcomma_p要素を代入 set e to (item (i + 1) of comma_p) --i+1個目のcomma_p要素を代入 set cvs_i to text s thru e of source_text --i個目のcvsコンテンツを切り出す set cvs_i to text 2 thru -2 of cvs_i --カンマを削除 copy cvs_i to the end of cvs --cvsリストの末尾にcsv_iを追加 end repeat return cvs end read_cvs --function by 鳶嶋工房 --文字列検索 on findText(theText, serchStr) set tmp to AppleScript's text item delimiters set AppleScript's text item delimiters to serchStr set theText to every text item of theText set theList to {} set x to 0 set delNum to number of serchStr repeat with curItem in theText set x to x + (number of curItem) set end of theList to x + 1 set x to x + delNum end repeat set AppleScript's text item delimiters to tmp if (number of theList) = 1 then return {} return items 1 thru -2 of theList end findText
結果
{{aName:"item-A", bName:"item-B", cName:"item-C"}, {aName:"item-A", bName:"item-B", cName:"item-C"}, {aName:"item-A", bName:"item-B", cName:"item-C"}, {aName:"item-A", bName:"item-B", cName:"item-C"}}
ちなみにこれらを取り出す時は
log aName of item 4 of theRecode
とすれば4番目のaNameが取り出せる
雑感
- だいぶAppleScriptになれてきた
- 途中から変数の付け方かえたのでとても汚くなった
- でも、レコードを使えばリストで無理矢理やりくりするより遥かに分かりやすいと思う
参考にしたページ
- 鳶嶋工房 / AppleScript / Tips / 文字列の検索・置換
- findTextハンドラをお借りました。ありがとうございます。