FC2ブログ
2016/07/12

VLCの動画再生でサイケデリックな色の乱れ

多分、そういうこと起こるの、Linuxだと思いますよ。Windowsだとアクセス方法がDirectXだけだもの
VLCを入れて、そうだ、動画再生支援でCPU負荷を下げようって
おかしなことを試してみるのが間違いなのです。
そうでなくてもパッケージ依存関係で入っているこれらのパッケージでおかしい。
GPUの動画再生支援のやり方は2つ
libva

vdpau
で、私の場合、intel HD Graphics 3000のパソコンで
libva-intel-driverが先に入っていました。
このあと、libvdpau-va-glを入れると、動画がめちゃくちゃになります。
それこそサイケデリック。
libvdpau-va-glを削除すると、元に戻ります。
libvaやvdpau関連のパッケージをいくつか削除して問題を切り分けてみてください。
スポンサーサイト
2015/06/08

VLC Media Playerの音質が悪い

VLCはとてもいいプログラムですが、ちょっと問題があります。
今回直すのは音質が悪いということです。

まずは、音量の表示を見てください。VLCは200%までボリュームが有ります。これは音を拡大できるということです。
それが、なんとまあ100%を超えているじゃないの?
実はスクロールで音量が調整できるので知らないうちに音量が100%を超えているかも
Windowsカーネルのピークリミッタを考えると70%ぐらいかな?

じつは少なくともドルビーとDTSでコンプがかかります。
どうもドルビーの研究と関係あるAACの音声でもコンプがかかるかもしれません。
これは小型スピーカー、内臓スピーカーでは有効ですが、ヘッドホンと本格オーディオ、サラウンドでは余計なおせわです。
これを直すには?
VLC 2.2.1の場合
ツール>設定>「すべて」とかいてあるボタンを押す>入力/コーデック>オーディオコーデック>A/52の
ダイナミックレンジ圧縮のチェックを外す。
A/52のとなりのDCAのダイナミックレンジ圧縮もチェックを外す。
設定を保存する。
たぶんこれで快適になります。

おまけ: MKVでどんな形式もおさまる
いろいろな動画のフォーマットがあり、圧縮形式がありますが、
MKV(Matroska Video)はいろいろな圧縮コーデックが収まるコンテナなので
なんかのときに結構役に立ちます。
しかし、VLCでMKVで保存すると、実際のデータより何分も何時間も多めに表示され、シークがつっかえます。
こんなときはffmpegのコマンドです。

ffmpeg -i 入力.mkv -c copy -shortest -o copyfile.mkv


ffmpegは本当にコピーするだけなのでやたら早く終わりますが、copyfile.mkvではちゃんと動画のデータのある分だけの再生時間が表示されます。

もしこれで快適になったら、記事の下にある拍手ボタンを押してください。検証になります。
2015/03/28

VLCでm2tsのHD動画がカクカク、乱れる

VLCが万能ではないということに気づいてしまった。
VLCを、特殊なOS(Openindiana)で使っていて起こる問題かと思ったら、
VLCがかなり歓迎される環境であるLinuxにおいても、
m2tsのHD動画が乱れてしまうことが分かった。
それでも、同じやりかたで解決できます。

設定>設定の表示-すべて>オーディオ>オーディオ非同期調整を-300でセット
場合によっては-303とか、わずかにかえます。
これでHD動画の乱れは治ります。
ただし、動画によっては、とくに360pなどの小さい動画など、映像が音声よりあきらかに遅れるのが変です。

いろいろなHD動画が乱れたことがあった気がするが、今確かめてみるとm2tsだけがだめです。
TSの類だけが-300の補正がいるみたいです。

もしそうであるならば、MPEG2-TSの設定だけ治せます。
設定>設定の表示-すべて>デマルチプレクサー>MPEG-TS>「インストリームPCRを信頼」のチェックをはずす
これでどうでしょうか?


VLCの究極の高画質セッティングとは
VLCなど動画プレイヤーは高速化の為、人間が何とか書き表せるC言語からコンピュータへの命令文に翻訳するコンパイラであるgccに

-ffast-math

という設定を付けています。
実は、このオプションは算数の処理をC言語で書いたのにわずかにそれとは違う命令文にしてしまうのです。
今の新型パソコンは処理能力が有り余っているので、-ffast-mathや-Ofastの設定を抜いてVLCをビルドすると、
多分ブロックノイズなどが改善されるはずです。できればライブラリも。
これは上記のLinuxともまた違うOpenindianaへの適用で判明しましたが、今までいってこなかった。
パソコンをよく分かっていない人には難しすぎるし面倒くさすぎる話なので、素人がこれであの動画をより再現したいと言うえげつない欲望は損に終わるでしょう。凡人には目を凝らさないとわからない違いに近いです。
また無料でオープンソースの動画プレイヤーは特許回避などの技術上の問題があり、一旦コーデックが開発されると、それはそれ以上の進化はピタリと止まることも少なくありません。
これからの高画質プレイヤーの進化が待たれます。
2014/11/17

Openindianaで 動画 音声 YouTube やりたい放題

この記事は他の記事でオフトピックぎみだった文を載せ直すものです。
Openindianaで、テクノロジーのことだらけやっていて、何か物足りなくないですか?
そう、ちょっとは普通のパソコンと同じように使いたい。ちょっとは融通がきいてほしい。
それには、動画や音声の再生や、YouTubeを見れることが感じんです。
しかしオタクでないと解決はきついです。

本気でやりたいならNVIDIAのグラボをいれよう

Solarisむけの企業が出してくれるドライバーはNVIDIAだけです。
ノートパソコンでもしょぼくていいからNVIDIAのチップが入っているものを選びましょう。
何もしなくともまともにHD動画が再生できるには。
optimusというNVIDIAのと他のグラボを切り替える機能はつかえません。

まずhipsterをいれよう

hipsterにはソフトウェア側が最新に近くなっていて
libxcbが入るなど、いろいろ新しい3Dや動画のプログラムを入れるのに都合がいいです。
2016年:ORACLEがオープンソースのカーネルモジュールを公開、バックポートでOpenSXCEという亜種から持ってきた、テスト中のドライバーdrm_gem_kmsでintelのグラフィックが使える可能性はあります。
これはひょっとすると自分で入れないといけないのかな?

Sunご自慢のZFSの機能を切らないといけない


/etc/systemに

set zfs:zfs_prefetch_disable = 1


ZFSの機能の一つに、ファイルデータ先読み機能があるが、これの説明を読むと
ちょこまかシーケンシャルアクセスされるとCPUがよほどないと追いつかないとある。
ちょこまかシーケンシャルアクセスはちょうど動画再生で行われるものです。
一方の動画プレイヤーはメモリーにデータをキャッシュするので先読み機能は余計なもので、カクカク動画になります。
なおスケジューラはご自慢のFSSがいいです。

Xorgをちょっと速くする

セキュリティに厳しくなければ、
/etc/security/exec_attrを見て権限を付け足すとか
Forced Privilege:solaris:cmd:::/usr/bin/amd64/Xorg:uid=0
これぐらいの権限の設定はLinuxだとデフォルトになっているはずですが?
/etc/systemというファイルでカーネルパラメータの変更ができる。デバイスドライバーへの転送量を変えます。

set strmsgsz = 262144
set strctlsz = 4096

これで再起動。strctlszは8192にするとさらに速くなる?
なおこれでネットワークも速くなるでしょう。

うそ??

パフォーマンスチューニングの記事に驚愕のデフォルト設定の事実が。

intelでは希望がある

intelのグラフィック機能(CPUでなく)を使っている方は、
Section "Device"
Identifier "Card0"
Driver "intel"
Option "XVideo" "false" #Xvが逆に速度をおとすパターンあり
Option "LVDS24Bit" "true"
Option "EXAOptimizeMigration" "true"
Option "XvMC" "true"
EndSection

こんな/etc/X11/xorg.confを書いてみてください。とくにnehalem世代のパソコン。しかしこれでも少し重たいかもしれません。
compizは、余計なものと思っているかたが多そうですが、有効にすると速くなります。システム>外観>視覚効果
Xorgは1.7.7ですが、すでにアップストリームでパッチが当たっていてXorg 1.14を入れる準備ができているらしい。
https://www.illumos.org/issues/4044
なんとXorgを1.17に一気にアップグレードする動きがhipsterにあります。
いろいろなパソコン、サーバーで問題なく高速にXorgが動くようになるでしょう。

OpenCSWを導入する

sfe.opencsw.orgの説明を英語だけど読んで、
ffmpegやVLCを導入できます。機能はGOMに匹敵するあのVLCだよ!
ラッキー!簡単ですがよく見ると何か肝心な機能が足りないのがわかる。
動画のウィンドウはなぜか別に出てくるし、字幕機能が使えない。どうした?

VLCをコンパイルすれば、心配ない

ここからは専門知識が必要です、しかしOpenindianaを使っているほとんどの人は持っている知識です。
必要なパッケージはほとんど先ほどのOpenCSWから入りました。libxcb,xcb-utilとxcb-protocolsパッケージもいれたら、
最新版のVLC-2.1.5をソースコードからいれます!
Openindianaを使っているほとんどの人はオタクだと考えられるので詳しくは自分で調べてください。

Solarisの系統はコンパイルにSunStudioを使う場合が多いと思われますが、私はgccをつかっています。OSSはその方が楽になってゆくのかな?

luaが使えると、字幕が出てくれるのと、動画サイトの動画が見れる、細かい機能がついてくれるので、だいじです。
わざわざlua-5.1.5をビルドして/usr/lua5.1に入れてみます。このような/usr以下を無駄に増やすのはsolarisの常套手段です。
そのとき、luaのソースはあまりに単純な作りなので、pkg-configの対応とDLLが出来ません。
ソースコードのlua.pcに手を加え、/usr/lua5.1/lib/pkgconfigにいれます。PKG_CONFIG_PATHにそれを加えます。
DLLは静的ライブラリから作るとまったく使えないものが出来ます。ldに-zをつけるとうまくできるんだっけ?
さらにうまくいくにはDLLなのにlua.oも部品に加え、main関数も登録します。

ソースコードにパッチを当てます。ちょっとpatchコマンドで使える形になってないかも。

orig/vlc-2.1.5/compat のみに存在: dummy.c
vlc-2.1.5/ のみに存在: config.log
diff -r vlc-2.1.5/modules/access/directory.c vlc-2.1.5/modules/access/directory.c
327c327
< O_RDONLY );
---
> O_RDONLY | O_DIRECTORY);
orig/vlc-2.1.5/modules/demux のみに存在: dummy.cpp
orig/vlc-2.1.5/modules/stream_out のみに存在: dummy.cpp
diff -r vlc-2.1.5/src/posix/filesystem.c orig/vlc-2.1.5/src/posix/filesystem.c
158,159c158,159
< if (len == -1 || len < _POSIX_NAME_MAX)
< len = _POSIX_NAME_MAX;
---
> if (len == -1 || len < NAME_MAX)
> len = NAME_MAX;



20150213修正 VLCのコンパイルの最初は
 #!/bin/bash
export PKG_CONFIG_PATH=/usr/lua5.1/lib/pkgconfig:$PKG_CONFIG_PATH
export CFLAGS="-g -O2 -Wall -DLUA_COMPAT_ALL -fvisibility=hidden -mtune=native -ffast-math -funroll-loops -fomit-frame-pointer "
export CXXFLAGS=${CFLAGS}
export SDL_CFLAGS='-D_GNU_SOURCE=1 -I/usr/include/SDL'
export SDL_LIBS='-lSDL -lpthread -lposix4'
export LUA_CFLAGS=-I/usr/lua5.1/include
export LUAC=/usr/lua5.1/bin/luac
bash configure --with-pic


さらにインストールした後も/usr/local/share/applications/vlc.desktopを

Exec=/bin/env LD_PRELOAD=/usr/lua5.1/lib/liblua.so.5.1 /usr/local/bin/vlc --started-from-file %U


このようにするとようやくluaのモジュールがつかえるようになる!
YoutubeはVLCでは見れないことがわかった。gnutlsのバージョンが低すぎるのです。すみません。

VLC:まだまだ動画がカクカク


たぶんnVIDIAの場合余計な設定はいらないでしょう。
intelのオンボードグラフィック、変なことがわかった。
まずCPUに余力がある人は設定のビデオ≫「自動」を「X11ビデオ出力」にしてください。
それと詳細設定のオーディオの「オーディオ非同期調整」の値を-300にするとHD動画がなめらかに再生できる。
でも音声がずれる。 -210ならカクカクもしないし音声もずれない。
ということは、Solaris系のOpen sound Systemが0.2秒音声データをキャッシュして再生が遅れる、ということなのでしょうか?

実はffmpegもコンパイルできる

bash configure --enable-pic --enable-gpl --enable-version3 --enable-shared --extra-cflags='-mtune=native' --extra-cxxflags='-mtune=native'


最初はこんな感じでなんなくffmpeg-2.4.3をコンパイルできた。VLCでつかうにはパッチがいるが、
diff --git a/configure.ac b/configure.ac
index a684338..053713a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2242,8 +2242,8 @@ AC_ARG_ENABLE(avcodec,
[ --enable-avcodec libavcodec codec (default enabled)])
AS_IF([test "${enable_avcodec}" != "no"], [
PKG_CHECK_MODULES(AVCODEC,[libavcodec >= 53.34.0 libavutil >= 51.22.0], [
- PKG_CHECK_EXISTS([libavcodec < 56],, [
- AC_MSG_ERROR([libavcodec versions 56 and later are not supported yet.])
+ PKG_CHECK_EXISTS([libavcodec < 57],, [
+ AC_MSG_ERROR([libavcodec versions 57 and later are not supported yet.])
])
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"

こんなパッチが出回っています。あろうことかちょっと認識を書き換えてautoreconfすればいい。