fc2ブログ

Au用の動画変換プログラムの修正

ezmovie/動画をau用動画に変換する(動画変換FFmpeg)で紹介されているプログラムで動画を変換してみたのですが、動画によっては音声がうまくでないものがありまして、何が問題なのか色々調べてみました。
音声がダメなやつでも、UUIDはうまく設定できているし、映像も正しくでます。しかし音声のstcoの修正に失敗していました。
上記サイトのプログラムでデバッグ出力してみると、確かに一度しかstcoを検索しません。
もちろん、hexdumpしてみると、stcoは二箇所埋め込まれています。

うんうん唸って半日・・・ようやく問題箇所発見!
fsearch関数でstcoの位置を検索しているのですが、この関数では動画ファイルを1024バイトづつ区切って、文字列の一致検索をしています。
このとき、この1024バイトの中で「一度しか」検索していなかったのです。
問題箇所を抜粋します。67行目のwhile文の周辺です。

while data = i_stream.read(1024)
data = data.to_s
if data.index(word) != nil
#i_stream.close
pos << readed + data.index(word)
end
readed += data.length
end

以下が修正した部分です。

while data = i_stream.read(1024)
data = data.to_s
index = data.index(word)
while nil != index
pos << readed + index
index = data.index(word, index + 1)
end
readed += data.length
end

文字列検索のindexメソッドは第二引数に検索する位置を指定できます。
発見した次の位置を指定して、次の場所を探しています。
この修正でめでたく、動画変換ができました。
スポンサーサイト



COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)