搜尋此網誌

2024年7月22日 星期一

取得 Steam Deck 錄製的遊戲影片

緣起:


    Steam 的 Beta 頻道,不久前有推出遊戲錄影的功能,讓你可以不需依賴第三方的軟體,直接就能在 Steam 遊戲裡錄影,這功能對 Steam Deck 來說超實用的,之前在玩 switch 時,覺得它的隨時錄製 30 秒前的影音功能超方便的,讓你不會錯任何想分享的突發影像。

    我今天玩遊戲有錄了一個影片,但影片的 size 超過了能 share 的大小,所以想來學著怎麼把影片檔給搬出來,順便寫文章記錄。




取出遊戲模式的螢幕擷圖:


    由於我的文章會需要在 steam deck 上操作的擷圖,擷取當下的螢幕圖片很簡單,按 Steam 鍵+R1 就能擷圖,但問題是,我不知道圖片放哪。後來去 reddit 看,得知,那些資料都是放在 /home/deck/.local/share/Steam/userdata/{你的 steam id} 裡,由於 steam deck 就只有我一個人使用,所以 userdata 下就只會有一個資料㚒,用 ssh 進入那目錄後,下 ls 的指令,會看到有不少的資料㚒,那些資料㚒都是數字,跟遊戲的 id 有關,直接看的話根本不知道哪個是哪個。


    後來想到,linux 的 find 指令有提供依據檔案更動時間來找檔案的功能,我就先在 steam deck 上隨便擷個圖,然後下指令,找出 3 分鐘内更動的檔案

find . -cmin -3


    哦 ~ 那個 ./760/remote/7/screenshots/20240722021635_1.jpg 看起來好像就是它。我把這個檔案給搬到 Ubuntu 上面,然後用圖片瀏覽器看,確實是它,所以可以確定,你在 Steam Deck 的遊戲模式,未進入任何遊戲時的擷圖,都會放在 /home/deck/.local/share/Steam/userdata/{你的 user id}/760/remote/7/screenshots 資料㚒裡


壓縮 clip 資料㚒:


    我觀察後發現,遊戲裡錄製完的 clip 會放到 /home/deck/.local/share/Steam/userdata/{你的steam id}/gamerecordings/clips 資料㚒裡,不同的 clip 分成不同的資料㚒,當前有兩個資料㚒,我那個錄製的影片,大小是 500 多 MB,所以用 du 查詢一下

du -sh $(ls)


    OK,確定是 clip_1809540_20240721_160759 那個資料㚒,我接著要把它給移置我的 ubuntu 筆電上,在這之前想先壓縮它,減少傳輸的時間,順便練個 tar gzip 的使用。

tar cf - clip_1809540_20240721_160759 | gzip -9 > clip.tar.gz

    原始資料㚒大小 535 MB,壓完後的 gz 檔是 534 MB = =,好哦。


將檔案組成MP4:


    看著這篇 reddit 文章學的, clip 資料㚒裡面是長這樣


    影片是在 video/fg_1809540_20240721_160452 裡,但裡面放的不是 mp4,而是很多的 m4s 檔。我的理解是,這些格式主要是給串流用的,每個檔案都是最多 3 秒的片段,我們需要把它組起來。


    可以用 cat 把這些 m4s 組起來。觀察後發現,有 init-stream0.m4s 跟 init-stream1.m4s, 它們是開頭,cat 指令後的第一個檔案要放它們,然後有兩群資料,chunk-stream0-{數字}.m4s 跟 chunk-stream1-{數字}.m4s。

    先把 stream0 的 m4s 組起來,指令會是,因為檔名是有數字順序的,所以後半部可以用萬用字元取代


cat init-stream0.m4s chunk-stream0-* > /home/birdshiu/Desktop/group0.mp4
    等同於

cat init-stream0.m4s chunk-stream0-00001.m4s chunk-stream0-00002 ..... chunk-stream0-00063.m4s > /home/birdshiu/Desktop/group0.mp4

    stream1 的 m4s 也是比照辦理,輸出成 group1.mp4。

    這時用 vlc player 點開這兩個 mp4 檔會發現,group0.mp4 只有影像(有些片段還會怪怪的),而 group1.mp4 只有聲音,一個是影像頻道,一個是聲音頻道。

    最後要把這兩個 mp4 結合,用 ffmpeg,可以用 apt 來安裝套件,安裝好後,到 Desktop 下

ffmpeg -i group1.mp4 -i group0.mp4 -c copy final_video.mp4

    那個 final_video.mp4 就是完整的影片了。


用 ffmpeg 來壓縮影片:


    一個 500 多 MB 的影片,在分享上不太方便,可以用 ffmpeg 來做影片的壓縮,參考資料

ffmpeg -i final_video.mp4 -c:v libx264 -crf 23 output.mp4

    -c:v libx264,使用 H.264 編碼,-crf 可以指定影片的品質,數字愈低,品質愈好。指令進行時, cpu 會很忙


    指令完成後,可以看到影片的大小減了不少



沒有留言:

張貼留言