x264_L-SMASH とは
ffmpeg / Libav 等に実装されている lavf を用いてオーディオの入出力をサポートしたものに x264-audio があり、その GPAC ライブラリを L-SMASH ライブラリに差し替えて開発されていたプロジェクト。端的には、x264 をフォークした x264_audio 、その x264-audio をさらにフォークして誕生したのが x264_L-SMASH とも言えます。

当方のビルド指針
  • 必要だと思われるパッチのみ当て、不具合検出の切り分けを容易にして安定性を重視する
  • Windows 向け x86(32bit)およびx64(64bit)バイナリ、lavfの有無を含めた4種のバイナリをリリース
  • x264 および x264_L-SMASH 最新情報(Rev.2409)
  • x264_L-SMASH の L-SMASH ライブラリは r890 相当
  • ffmpeg git-f7f5370(x264_L-SMASH)
  • r2358からffmpegsource(ffms)のサポートを外しました(lavfで事足りるため)
  • x264_L-SMASH オリジナルの lavf 入力で確認された以下の不具合をすべて修正
  • PCM音声のAVI・WMV コンテナを入力するとチャネルレイアウトが不正でエンコードできない
  • リサンプラーを通すと音が割れるなど音質が極度に劣化する
    テンポがスローになり音程が下がる(例:44.1KHz入力→48KHz出力/8bit→16bit等)
  • ファイル名に Unicode が含まれている場合、出力ファイル名が文字化けする

  • colormatrix未指定時のデフォルト値を「undef」ではなく「bt709」に変更
  • 現在の映像フォーマットは解像度に関係なくBT.709が大半を占める(日本のデジタル放送のSD送信はBT.709。DVDも近ごろはHD制作の影響からBT.709ベースが多い)ため、うっかり指定しなかった場合の救済策。もちろん、colormatrix オプションで指定した場合は、その値が適用されます。しかし、ポストプロセスの色空間変換に colormatrix 設定を渡して正しく処理してくれる環境はあまり無いため、神経質になる必要もなく、「保険」程度に捉えてください。

    # 現状 Android 端末は、colormatrixを見ずBT.601固定であり、Windows系プレイヤ(デコーダ・ポストプロセス処理を含む)もcolormatrixフラグを無視して解像度判定するものが多い(本来、BT.601やBT.709は解像度で決められているものではないため、エンコード時に出力解像度でcolormatrixを変更するものではありません。あくまでデコード時の苦肉の策です)。

    OpenCL について
    lookahead 処理を GPU に渡し、コンピュートタスクとして実行させるOpenCLパッチがr2286付けで公式に取り込まれました。OpenCL 1.1 以降に対応したGPUと対応ドライバが必須となります。

    # AMD製GPUの省電力コントロール技術・スイッチャブルグラフィックス技術を統合した「Enduro」には非対応
    # IvyBridge までの Intel 製 iGPU は非対応(Haswell の iGPU Iris 等の対応状況については不明)

    当方の動作環境下(Windows7 Professional x64 / HD5670 および HD7870 / Catalyst 13.4)において動作確認済みですが、異なる環境(異なるCatalystバージョンやNVIDIA製GPUとGeForce Driverの組み合わせ等)での動作確認はしておりませんので、それら環境での絶対的な動作保証は致しかねます。ご了承ください。

  • OpenCL オプションスイッチについて
  • OpenCLに関するオプションスイッチは以下のとおり。

    --opencl
    OpenCLを有効化します(未指定・デフォルトでは無効)。対応ビデオカードとOpenCL対応ドライバが必須となります。

    --opencl-clbin "カーネルファイル名とそのパス"
    OpenCL有効時にコンパイルされたカーネルを任意ファイルパスへ保存します。ファイル名・拡張子も任意で指定可。

    --opencl-device (integer)
    OpenCLで処理する際に、スキップさせるデバイス(GPU)数を指定します。デフォルトでは検出されたOpenCLデバイス(GPU/CPU)を扱うため、シングルGPU環境では未指定でかまいません。

    動作確認環境
    CPU : Core i5-2500K
    GPU : AMD RADEON HD7870
    主記憶 : 16GB
    Windows10 Pro 64bit
    AviSynth 2.6
    AviSynth+ r1576
    AviUtl version1.00

    動作不具合に関するコメント時のお願い
    基本的に、同じ挙動を再現するための確認を行い、それで再現確認できた場合のみ不具合として当方にできる範囲内での対応をします。そのため「○○できない。フリーズする。」だけでは大雑把すぎて再現することが難しいケースもあり、できる限りで結構ですので「再現の条件・環境」をお伝えいただきたいと思います。

    ダウンロード
    転送量超過を防ぐため現在のところ日本国内のみのアクセスに限定しています

  • x264_l-smash r2409 32bit
  • x264_l-smash r2409 64bit
  • x264_l-smash r2409 diff
  • x264 / x264_L-SMASH 公式・非公式リンク
  • x264公式 VideoLAN - x264, the best H.264/AVC encoder
  • x264_L-SMASH 限りなく公式に近い非公式 猫科研究所 - x264_L-SMASH unofficial repository
  •  

    1件のコメント

    1. colormatrixのデフォルトが「bt709」になったのはどのリヴィジョンからなんでしょうか?

      5673@name
    2. 仕様なのかバグなのかわからないので質問させてください。
      以下の通りのコマンドでこのサイトからダウンロードしたx264-r2274_win64_lsmashでエンコードしました。

      qaac –adts –tvbr 115 “audio1.wav” -o “audio1.aac”
      qaac –adts –tvbr 115 “audio2.wav” -o “audio2.aac”
      qaac –adts –tvbr 115 “audio3.wav” -o “audio3.aac”
      muxer -i “audio1.aac” -i “audio2.aac” -i “audio3.aac” -o “audio_3track.m4a”
      “x264.r2274_win64.exe” –crf 20 –input-res 1920×1080 –fps 24000/1001 –audiofile “audio_3track.m4a” –acodec copy –priming 2112 -o “out.mp4” “in.avs”

      自分としては音声トラックが3つあるmp4をエンコードするつもりでしたが、
      できあがった”out.mp4″を確認すると、音声トラックがaudio1の1つしかありませんでした。

      このように音声トラックが複数あるm4a音声ファイルをエンコ時に指定すると
      出力ファイルに反映されるのは最初の音声トラックのみというのは、
      x264_L-SMASHの仕様でしょうか?

      x264_L-SMASHで複数音声トラックのm4aファイルを結合した場合
    3. > x264_L-SMASHで複数音声トラックのm4aファイルを結合した場合 さん

      基本的にマルチトラックのトラックナンバーを指定する機能がない(マルチトラックの扱いを前提にしていない)ため、バグというより仕様かと思われます。

      マルチトラック音声を扱う場合は、お手数ですが最後にL-SMASHのmuxerかremuxerで映像と複数の音声を格納するのが確実ではないでしょうか。

      POP
    4. ありがとうございました。
      複数の音声トラックを結合したい時は素直にmuxer、remuxerで結合します。

      ありがとうございました
    5. x264_L-SMASHでmp4alsRM23のmp4を指定すると以下のエラーが出てエンコード失敗してしまいます。

      “C:\mp4alsRM23.exe” -r-1 -MP4 “C:\Wav.wav” “C:\Als.mp4”
      “C:\x264.r2274_win64.exe” –acodec copy –audiofile “C:\Als.mp4” –crf 21 -o “C:\X264Als.mp4” “C:\Avs.avs”

      mp4 [error]: failed to append a audio sample.
      mp4 [error]: failed to flush audio frame(s).
      mp4 [error]: failed to flush the rest of audio samples.

      でも、mp4alsRM23.exeから-r-1を取っ払って、-MP4だけのmp4だとエンコードはうまくいってしまいますが
      ランダムアクセス的に大丈夫なんでしょうか?
      また、これでできたmp4をダンプするとM4V、M4Aがcompatible_brandsに入っていますが、これ規格的にはどうなんでしょう?
      –acodec copyで指定したのがアップルのAACやALACならM4V、M4Aが入ってもよさげですけどALSなのでアップル向けmp4仕様とするには違和感があるのですが。

      mgsf
    6. いつもお世話になっております。

      L-SMASH_Works_r554_plugin-set.zipに含まれるlsmashinput.auiのLW-Libav経由および、
      LSMASHSource.dllのLWLibavVideoSourceで動画を読み込もうとすると失敗します。

      AviUtlのエラー表示
       ファイルの読み込みに失敗しました。
       このファイル形式には対応していないか
       対応するコーデックやプラグインが
       登録されていない可能性があります。

      AviSynthのエラー表示
       Avisynth open failure:
       LWLibavVideoSource: failed to get the video track.

      当方の環境
       WindowsXP Home Edition Version 2002 SP3
       AviUtl version 1.00
       AviSynth 2.60 build:Jan 14 2013 [16:50:35]

      lsmashinput.auiのLibav+L-SMASH経由やLSMASHSource.dllのLSMASHVideoSourceは問題なく使用できます。
      L-SMASH_Works_r540_plugin-set.zipのLW-LibavやLWLibavVideoSourceでは特に問題なく使用できていました。
      VapourSynthは導入していないので確認していません。

      よろしくお願いいたします。

      匿名希望
    7. > mgsfさん
      その辺りの知識について私もそれほど深いわけではないのですが、プライベートストリームを通じてMPEG-4 Part14のファイルシステムに埋め込むことはできるものの、それがapple mp4としてどうなのか……というのは確かに引っかかるところではありますね。

      compatible_brands なので不具合がなければそれで良いような気もしますが、確実に知りたい場合はそちら方面の知識に長けたmuken氏に訊ねるしか無さそうです。

      > 匿名希望さん
      もしかするとffmpegのビルド設定を変更した影響かもしれませんので、思い当たる部分に手を加えて今夜中にもテストバイナリをここで提示したいと思います。

      追記:エラーが出たファイルの仕様(コンテナ・コーデックなど)をお知らせいただけますと助かります。

      ご不便をおかけしますが少々お待ちいただけますでしょうか。

      POP
    8. 返信ありがとうございます。
      肝心なファイル形式を書き忘れてスミマセン。

      手持ちのファイルで確認したところ
      avi(Xvid+mp3)、wmv(wmv9+wma9.2)、mpg(mpeg1+mp2)、地上デジタル放送のts等は問題なく入力出来ました。
      読み込めないのはmp4(H.264+AAC)とmkv(H.264+AAC)です。
      mkv(H.263+AAC)は入力出来たのでH.264のデコードに失敗しているみたいです。

      H.264は POP氏がビルドした x264-r2274_win32_lsmash.zipに含まれる x264.r2274_win32light.exe を使用して
      以下のオプションで確認しました。
       x264 –crf 24 -o test.mp4 test.avs
       x264 –crf 24 -o test.mkv test.avs
      上記のオプションで作成したファイルはr554のLWLibavVideoSourceで入力しようとするとエラーが出て読み込みできません。
      r540のLWLibavVideoSourceだと問題なく使用できます。
      test.mp4はr554のLSMASHVideoSourceでも入力出来ました。

      よろしくお願いいたします。

      匿名希望
    9. muken氏のツイッターは見ていますが自分はツイッターをやっていません。
      直接アクセスするにはツイッターしかないでしょうか?

      それと、-r-1を取っ払ったmp4alsRM23のmp4だと、x264_L-SMASHでエンコードはできても
      VLC media playerではランダムアクセスできない動画になっちゃいますね…。

      mgsf
    10. >>mgsf
      compatible brandsには再生に互換を保てていれば問題ありません。
      非互換であるケースというのは、brandで定義されている機能で矛盾が起こる、例えば、ファイル構造が変わってしまうケースです。

      brandによっては映像と音声のインターリーブ間隔に制限がある場合があって、そのようなbrandが定義されていて且つ制限を超えているのであれば、非互換。となります。

      またbrandによって内包するCODECの機能が制限されている場合があります。
      例えば、UltraVioletのCommon File Format (ccff)はMPEG-4 AAC LCしかサポートしていません。これにMPEG-4 AAC HEをサポートするmp42のbrandと併記した上で、MPEG-4 AAC HEをファイルに格納した場合、二つのbrand (ccff, mp42)のAACに関する定義上の非互換が生じ、規格違反となります。

      ISO/IEC 14496-12のC.4.6 Exampleを互換性の例として挙げましょう。
      3gp5がcompatible_brandsにあったとします。
      これは3GPP TS 26.234 (Release 5)の仕様に従っている意味です。
      3gp5が付いたファイルはH.263を内包しているかもしれません。
      同様に、mp42がcompatible_brandsにあったとします。ファイルはISO/IEC 14496-14の仕様に従っており、MP3を内包しているかもしれません。
      ここでmp42はH.263をサポートしていませんし、3gp5はmp3をサポートしていません。
      しかし、compatible_brandsにmp42と3gp5が与えられているのであれば、プレイヤーがMP3をサポートせず、3gp5だけに対応している場合、H.263だけを再生することが推奨されています。
      もし、プレイヤーにH.263とMP3を両方とも再生させることが前提であり、一方だけしかサポートしない場合にはプレイヤーは再生をしないようにするのであれば、compatible_brandsでそれぞれのbrandを記述するのではなく、代わりにH.263とMP3を両方サポートするbrandを定義し、記述するべきとあります。

      ISO Base Mediaの基本は「中身が未知のボックス構造は無視する。」です。
      なので、一方のbrandでサポートしない構造(or CODEC)があったからといって、すなわち非互換とは限らないです。

      Apple MP4 (iTunes MP4)の仕様は非公開なところがあって、互換性の是非はわからないですが、とりあえず、MPEG-4 ALSはAppleの再生系では未知のものであるので、無害だと判断しています。が、再生系が弾くのであれば、非互換とした方が良いかもしれません。

      >>匿名希望
      うーん。なんでしょうね。
      基本、同じコード使っているので一方で駄目というのは、日本語パスのケースくらいしか思い当たりません。
      特定のコンテナにおけるH.264の解析周りはr539辺りで一度壊してしまったので、r546までに修正を加えているのですが、それが関係しているんでしょうかね。
      でも、それが原因ならば、lwiファイルを一から作り直すことで解決すると思うのですが…
      (lwiファイルのversionが変わらなくても、解析結果のlwiファイルへの出力が変わることがあるので、プラグインのアップデート時には要注意です)

    11. おお…muken氏自ら出向いてくれるとは。
      規格のお話はよくわかりました。ありがとうございました。

      x264_L-SMASHでmp4alsRM23のmp4を指定するとエラーが出る件はremuxerでやることにしました。

      mgsf
    12. 当方でもL-SMASH Works r554でこれまでと違う挙動が見られましたので、今はr540に戻しています。
      具体的には、mkvが読み込めない(AAC、FLACなど関係なし)のは匿名希望さんと同様。
      mp4 videoは読み込めるのですが、これまではMBサイズのインデックスが生成されていたようなvideoでも、数百byteの壊れた?lwiが出力されます。
      さきほど、D:\test.mp4、mkvなどとしたテストファイルで再現を確認しました。
      一応、ご報告まで。

      shakunin
    13. > muken氏
      詳しい解説ありがとうございました!
      勉強になるなぁ(`・ω・´)

      > 匿名希望さん、shakuninさん
      当方で調べた限りでは、ffmpegライブラリの問題ではなく L-SMASH Works の r541 および r542 の commit で発生していたようです。

      r541 では PAFF 対応に際し、index ファイルのフォーマット変更などに手が加えられましたが、この時点で一部フォーマットが読み込めなくなり(MotionJPEG2000等)、r542からお二方からご報告いただいた事象を確認しました。

      この書き込みでmuken氏の目にとまるかもしれませんが、とりあえずTwitterでもこの事をお伝えしておきます。

      追記:
      muken氏からコメントがありまして、ffmpegライブラリに含まれるBitStreamFilterを無効化していたことが原因だと判明しました。r542からBitStreamFilterのh264_mp4toannexbを使用しているとのことです(r541まではBitStreamFilterが不要であるため当方がビルド時に無効化したままだったのが原因)。H.264ストリームがLW-Libav経由で読み込めない現象はこのためであり、L-SMASH Works の不具合ではありません。

      この件は、次回更新にて解消致します。
      匿名希望さん、shakuninさん、ご指摘ありがとうございました。

      POP
    14. r559のLWLibavVideoSourceでH.264のデコードが正常に動作することを確認しました。
      迅速な対応どうもありがとうございました。

      匿名希望
    15. こちらでもらったx264-r2310_win64_lsmash.zipとl-smash_r728.zipでエンコードしました。
      qaacの設定-V 112でエンコードしたm4aとx264.r2310_win64.exeでエンコードしたmp4をremuxerで結合すると、結合は成功するものの、
      ワーニングが出ます
      [Warning] failed to set an iTunes metadata.
      そして、結合したmp4のオーディオのnameが空白になってしまいます
      以前はたしか、nameがL-SMASH Audio Media Handlerになったと思います。

      何か使い方がおかしいでしょうか?

      バグかも?
    16. 今ためしたのですが、パソコンにl-smash_r710が残っていたのでそのremuxerで結合するとワーニングが出ず、name = L-SMASH Audio Handlerとなりました。
      設定しないとremuxerがオーディオのnameを空白にするようになったということでしょうか?

      バグかも?
    17. > バグかも?さん

      L-SMASH ライブラリの更新による変更だとは思いますが(該当のx264_L-SMASHはL-SMASH r728)、その挙動は qaac(qtaac?)のその設定でのみ発生するのでしょうか。

      当方、qtaacはまったく使わないため明確な返答はできないのですが、オーディオのネーム欄が空白になることで不具合や不便があるようでしたら、muken氏に尋ねてみたいと思います。できれば、L-SMASH r728 でもお試しいただき、どのようになるかお知らせいただけると助かります。

      POP
    18. HD画質で録画したmp4の動画を、avidemuxというソフトを使用してAVIに無劣化変換してaviutlでl-smashで読み込もうとすると、「Detected CTS duplication at frame 1586(数字は動画によって変化します)」とでて、動画時間が倍になって、スローになって読み込まれてしまいます。
      再生速度をいじっても元の早さに戻りません。

      avidemuxというソフトで変換した動画(A)を、さらにaviudemuxでもう1度書き出し(B)、aviutlでBを読み込んだ後に、参照ファイルからAを選ぶと、上述した警告は出るものの、普通の動画時間に戻り編集できるようになります。
      しかし、この場合もエンコードする際に何度も警告が出てきてしまいます。

      何が原因かわからないのですが、直す方法はありませんか?

      てけすた

    コメントを残す

    メールアドレスが公開されることはありません。

    40 ÷ = 10

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください