工具:
- 用 ffmpeg 將影片轉成(抽出音樂) mp3
- $ ffmpeg -i input.mp4 out.mp3
- $ ffmpeg -i input.flv out.mp3
- $ ffmpeg -itsoffset 00:00:00.000 -i input.mp4 -t 00:00:51.000 output.mp3
- -itsoffset 00:00:00 代表從開頭開始
- -t 00:00:51.00 代表取 51 秒
最近用 VS2012 編譯程式時,發現預設的狀況是不給 Windows XP 用的,據說當時推出 VS2012 時有意拋棄掉 XP 的,總之,後來有推出修正方式了。
下載 vsupdate_KB2707250.exe 更新檔後,接著再編譯專案時,記得選擇 Visual Studio 2012 - Windows XP (v110_xp) 即可。
此外,若想要成 static 的,別忘了勾選 /MT 系列。
週末快閃新竹,跟老同學聊聊天,在網路上又跟學弟喇嘞幾句,聊聊近況,實在愜意。
最近的變化說大不大,說小不小,在工作上開始帶 team ,說來很妙,我自己一直沒有想要組 team 的生活,頂多想找一兩位同好把玩,也隨時準備單打獨鬥,並不是排斥組 team ,實在是人一旦便多後,管理上就要多花上許多時間 :P 若花了心思處理,就等同自己少了時間把玩東西。上週一突然多了個 dealine 後,很慶幸目前的成員都進行的很積極,反而漸漸看到一個 team 的價值,真的很讚。
至於人生的目標呢?去年碰到健康問題,說真的頓時目標就縮到很簡單:及時行樂。週末不會想窩在電腦前面,就算窩在電腦前面也不會想 coding 了,看看 PPS 給的清單也挺滿意的。此外,隨時都想帶著手機或相機去外頭拍個幾張,昨天去趟新竹後,對於照片的感觸又更深刻了,不再是追求多亮眼的場景,反而滲一點記憶足跡,挺滿足了。
至於同輩之間的目標呢?工作三四年後,不少人開始追求年薪了。雖然 22k 議題常提,但在資訊界中要找間年薪100的仍不是多大的問題 :P 有家庭的,繼續加碼到 150,有的在賺錢公司的則繼續追趕到200不等。至於自己嘛 @_@ 就像當年離開新竹時的心境,臭屁地認為既然都是成功,那先繞路走走也不錯吧 :) 妙的是,我發現周邊人換工作的主因,不見得是對未來有新的期待,而只是單純對環境膩了,薪資絕對不是最後一根稻草。
錢錢這事永遠是不嫌多的,我仍記著前室友跟我分享十多年的工作心得:
月薪從3萬多變到4萬多時,你會很有感覺,但月薪從5萬多,變到7萬多、8萬多、9萬多時,漸漸地你會沒有感覺的
此刻嘛,再給一些任性享受青春的熱血吧 :)
啊,又想旅行了。
最近接手同事用 C++ 寫的程式,過程中看到使用 JSON Spirit 來處理 JSON 格式,然而,卻發現字串處理有些問題,追了一下才發現這是函式庫沒有使用好而已。
簡單的說,如果要處理 Unicode 的部份,請改用 w開頭系列,如 json_spirit::wmValue 等。
簡易範例:
#include <iostream>
#include <string>
#include <json_spirit/json_spirit.h>
#define JSON_MESSAGE_STRING "{\"message\":\"\\u771f\\u5a01\"}"
#define JSON_MESSAGE_WSTRING L"{\"message\":\"\\u771f\\u5a01\"}"
int main() {
std::string data = std::string(JSON_MESSAGE_STRING);
std::cout << "Source: " << data << std::endl;
json_spirit::mValue mValue;
json_spirit::read(data, mValue);
std::cout << "mValue: " << json_spirit::write(mValue) << std::endl;
std::wstring wdata = std::wstring(JSON_MESSAGE_WSTRING);
json_spirit::wmValue wmValue;
json_spirit::read(wdata, wmValue);
std::wcout << "wmValue:" << json_spirit::write(wmValue) << std::endl;
return 0;
}
輸出:(在 Mac 上需安裝 Xcode 及其相關 command-tools 後,再用 MacPorts 安裝 boost 即可,接著下載 json_spirit 後,用 cmake 編出 libjson_spirit.a)
> g++ -I/opt/local/include -Ijson_spirit/ test.cpp libjson_spirit.a
> ./a.out
Source: {"message":"\u771f\u5a01"}
mValue: {"message":"\u001F\u0001"}
wmValue:{"message":"\u771F\u5A01"}
可以清楚看到,若不用 std::wstring 這類的處理,解碼就會出錯了。接下來的問題就縮到如何將 std::string 轉到 std::wstring 了 Orz
非常簡易的 std::string to std::wstring 硬轉法:
std::string data;
std::wstring wdata;
wdata.assign(data.begin(), data.end());
至於要輸出 wstring 的方式,繞路一陣子後,終於也找到解法:
std::wstring outwstr = wmValue.get_obj().find(L"message")->second.get_str();
std::cout << "UTF-8:" << boost::locale::conv::utf_to_utf<char>(outwstr) << std::endl;
今天驗證某套 JSON library 到底有沒解碼錯誤,一直再想該怎樣把 '\u' 這類開頭的字串解碼出來,後來就想到幾乎快隨處都可以用的 python 啦
print u"\u771f\u5a01"
如此就解碼完了,搭配 Ubuntu 環境預設是 UTF-8 編碼,在 Terminal 顯示 UTF-8 字串就幾乎無痛了。