20200430のMacに関する記事は10件です。

Mac の Visual Studio Code から Windows 10 にリモート接続する

Mac から ssh で Windows 10 に接続できるけど、Mac の VS Code から Windows 10 にリモート接続できない、なんてことありませんか?
これには、二つのバグが絡んでいます。

OpenSSH v8.1.0.0p1-Beta/v8.0.0.0p1-Beta に存在するバグ

https://github.com/microsoft/vscode-remote-release/issues/2475
このバグにより、OpenSSH v7.9.0.0p1-Beta を使用しないと、stderr> shell request failed on channel 2 のエラーが出てつながりません。

私は、C:\Windows\System32\OpenSSH フォルダの中にある exe を OpenSSH v7.9.0.0p1-Beta の exe で上書きすることで回避しました。
(C:\Windows\System32\OpenSSH の中の exe を上書きするには、フォルダ右クリックのプロパティ→セキュリティから権限の追加が必要、私の場合フォルダのオーナーを TrustedInstaller から私のアカウントに変更しました)

Mac で zsh を使用していると動かないバグ

https://qiita.com/niikura/items/d4c683347aa49441686b
この記事に書かれているように、remote.SSH.useLocalServer を false にしないと、Connecting with SSH timed out のエラーが出てつながりません。

Windows ホストのリモート開発もサポートされたはずなのにうまく動かないという方は、上記の二点をチェックしてみましょう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

_cgo_export.c:3:10: fatal error: 'stdlib.h' file not found の 解決方法(Catalina版)

概要

go get したときに出たエラーです。macOSのバージョンによって解消方法が異なるようなので、Catalina 10.15での解決方法です。

結論

以下コマンドで、環境変数をセットして、該当コマンドを実行したところ、解消しました。

export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"

内容

DBから gorm structs を生成するツールを検証しようとローカルにインストールしようとしたところ発生しました。
go get -u github.com/smallnest/gen

# runtime/cgo
_cgo_export.c:3:10: fatal error: 'stdlib.h' file not found

調べたこと

全く同じエラーのQiitaがあったのですが、macOS 10.14 で、Catalina 10.15 では解消しませんでした。
https://qiita.com/gold-kou/items/739958f996825cf33b89

かなり昔から継続しているissueがあったので読み進めました。
途中の解決方法もOSのバージョンに依存していました。
最後まで読み進めて、Catalina 10.15での解決方法の記載がいくつかありました。
Cコンパイラの環境変数やllvmをアンインストールする方法の記載がありますが、影響範囲が読めなかったので、過去の解決方法でもSDKをopenすることで解消していることから、SDKのパスをCLIで釣って環境変数にセットする方法を採用しました。

export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"

https://github.com/golang/go/issues/27921

感想

めでたし、めでたし

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【VSCode】VSNotesでマークダウン記法と画像貼付をして、万能ノート化する方法

導入から設定

image.png

拡張機能で上記をインストールする。

1.Pathの指定

保存するディレクトリを指定します。必須設定です。
Macの場合は、コマンドパレット(Ctrl + Shift + P)を開いて
VSNotes:Run setupをクリックします。

※コマンドパレットが開かないぞ? と言う方は Command + Shift + P を試して下さい。

image.png

VSNotes:Run setupをクリックすると右下に下記が表示されるので
Startをクリックしディレクトリを指定します。
予め、保存する為のディレクトリを作成した置いた方がいいかもしれません。

image.png

以降は、指定したディレクトリに情報が保存されます。

2.Markdownファイルの生成

コマンドパレットを開きVSNotes: Create a New Noteをクリックします。
Tagsとノートのタイトルの順に入力を求めらるので入力します。
後は、マークダウン記法で記載をしていきます。

image.png

プレビューを表示した場合は、コマンドパレットで
Markdownと打ち込めばプレビューを横に表示出来る項目が出てきます。
クリックすると右側にプレビューが表示されます。

左上に表示されているVS Notesの右側に更新ボタンがあるので、
クリックすると記事がFilesに表示されます。

image.png

3.Paste Images 導入

文章だけじゃなくて、画像も貼り付けたいとご要望の方は、
拡張機能Paste Imagesを導入して下さい。

image.png

拡張機能で上記をインストールする。

4.Paste Images 基本操作

1.画像をクリップボードに入れる → Command + Shift + Ctrl+ 4 範囲指定は任意
2.Option + Command + V で任意の場所に貼り付けます。
※画像は同じ階層のディレクトリに保存されます。

image.png

Command + C は? 

Command + Cではクリップボードに画像が入りません。
上記画面右下表示されている文章の通りクリップボードに画像がないよと言われます。
image.png

以上で、導入と基本操作については説明を終了します。
この他にも様々な設定をする事が出来るので、興味のある方は下記の記事をご参考下さい。

参考にさせていただいた記事

VSNotesの設定関係
https://qiita.com/bele_m/items/6115602d361a7c6cbb2c

VSNotesの紹介
https://www.karelie.net/vscode-notes/

Paste Image導入と設定
https://kinacon.hatenablog.com/entry/2019/01/30/Visual_Studio_code_Markdown%E3%81%AB%E7%94%BB%E5%83%8F%E3%82%92%E8%B2%BC%E3%82%8A%E4%BB%98%E3%81%91%E3%82%8B

スクリーンショットを直接クリップボードに保存する方法
https://qiita.com/ThreeTreesLight/items/3b09be6bcc7058ede8ef

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Zoomのアップデートで使えなくなったSnap Cameraを使えるようにする方法

はじめに

外出自粛でまったく外に出なくなりました.そうすると,寝癖が半端ない状態を気づかずにオンラインミーティングに出てしまったことがありました.そういうとき,snap cameraが便利です.snapchatの開発元のsnap.incが開発しています.
カメラにフィルターをかけてzoom等のミーティングに参加できるので,寝癖がついてても,メイクをしていなくても誤魔化せるので便利です.

ちなみに次のフィルターがお気に入りでよく使っていたのですが,私はずっとポケモンの「ディグダ」のフィルターだと思いこんでいました.どうやら,このフィルターは,「じゃがいも」のフィルターだったようです.私はずっとディグダに成りきっていたつもりで,じゃがいもになっていたみたいです.なんでディグダなのに,こんなに可愛くないんだろう.ハリウッド版のピカチュウ的なアレなのかな?というずっと抱いていた疑問が解決されました.

※解決策だけ知りたい人は,「アップデートで使えなくなった原因」を飛ばして「解決策1」と「解決策2」を読んでくださって結構です.

アップデートで使えなくなった原因

2020年4月2日に4.6.9のアップデートが配信されました.それ以降のバージョンのZoomクライアントアプリで,snap cameraのような仮想カメラを選択できなくなってしまいました.下記が4.6.9のリリースノートになります.

Release notes of 4.6.9 (19273.0402):
-Fixed installer issue

Twitterでしゃなはすさんが4.6.9のアップデートで仮想カメラが使えなくなった理由について言及してくれています.

ツイートのURL先のコメントを引用します.原文と翻訳を下記に示します.

In June 2019, the security researcher Jonathan Leitschuh discovered a trivially exploitable remote 0day vulnerability in the Zoom client for Mac, which “allow[ed] any malicious website to enable your camera without your permission”

2019年6月、セキュリティ研究者のJonathan Leitschuh氏がMac用Zoomクライアントにリモートで悪用可能な脆弱性を発見しました。これにより、悪意のあるWebサイトがユーザの許可なくカメラを有効にできてしまいます ?

悪意のあるWebサイトが許可なくカメラを有効できる脆弱性があったため,今回のアップデートでサードパーティのカメラを許可しなくしたようです.

具体的にはmacosアプリにはcom.apple.security.cs.disable-library-validationというパラメータがあり,それは署名が同じチームのものしか使えないというもので,このパラメータが変更されたようです.

解決策1

最も簡単な解決策は,ブラウザ版(Chrome)のZoomを使用することです. 自分も最近まで知らなかったのですが,ブラウザだけでもZoomは使用できるようです.ZoomのURLを開くと下記の画面になると思いますが,赤線で囲ったclick hereを押すとブラウザ上でZoomができるようになります.

スクリーンショット 2020-04-30 13.52.34.png

今回のアップデートはmacosアプリだけのものなので,ブラウザで行う場合は関係ないということです.
ちなみにChromeでは別プロセスでカメラアクセスを許可しているらしく,脆弱性はクリアしていると聞きました.(これに関してはちゃんと確認していないです.)

解決策2

macosアプリのzoomで仮想カメラを使用する方法です.
今回のアップデートでは,署名が同じチームのサードパーティしかアクセスできなくなったということは,アプリの署名を消してしまうだけで解決します.
気をつけてほしいのは,アプリの署名を消していまうことで「悪意のあるWebサイトがユーザの許可なくカメラを有効にできてしまいます」という脆弱性が発生してしまう可能性があるので,細心の注意を払ってほしいです.

下記がアプリの署名を消すコマンドになります.Terminalを開いて,下記のコマンドを実行するだけで,仮想カメラが使えるようになります.

codesign --remove-signature /Applications/zoom.us.app

謝辞

Twitterで@seanchas_t さんに教えていただきました.ありがとうございます!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Zoomのアップデートで使えなくなったSnap Cameraを使えるようにする方法[Mac版]

はじめに

外出自粛でまったく外に出なくなりました.そうすると,寝癖が半端ない状態に気づかずにオンラインミーティングに出てしまったことがありました.そういうとき,snap cameraが便利です.snapchatの開発元のsnap.incが開発しています.
カメラにフィルターをかけてzoom等のミーティングに参加できるので,寝癖がついてても,メイクをしていなくても誤魔化せるので便利です.

ちなみに次のフィルターがお気に入りでよく使っていたのですが,私はずっとポケモンの「ディグダ」のフィルターだと思いこんでいました.どうやら,このフィルターは,「じゃがいも」のフィルターだったようです.私はずっとディグダに成りきっていたつもりで,じゃがいもになっていたみたいです.なんでディグダなのに,こんなに可愛くないんだろう.ハリウッド版のピカチュウ的なアレなのかな?というずっと抱いていた疑問が解決されました.

※この記事は,macosでzoomを使用している人向けです.
※解決策だけ知りたい人は,「アップデートで使えなくなった原因」を飛ばして「解決策1」と「解決策2」を読んでくださって結構です.

アップデートで使えなくなった原因

2020年4月2日に4.6.9のアップデートが配信されました.それ以降のバージョンのZoomクライアントアプリで,snap cameraのような仮想カメラを選択できなくなってしまいました.下記が4.6.9のリリースノートになります.

Release notes of 4.6.9 (19273.0402):

  • Resolved an issue where a malicious party with local access could tamper with the Zoom installer to gain additional privileges to the computer
  • Resolved an issue where a malicious party with local access could gain access to a user’s webcam and microphone
  • Resolved an issue where some users could access chat in a webinar when chat was disabled

Twitterでしゃなはすさんが4.6.9のアップデートで仮想カメラが使えなくなった理由について言及してくれています.

ツイートのURL先のコメントを引用します.原文と翻訳を下記に示します.

In June 2019, the security researcher Jonathan Leitschuh discovered a trivially exploitable remote 0day vulnerability in the Zoom client for Mac, which “allow[ed] any malicious website to enable your camera without your permission”

2019年6月、セキュリティ研究者のJonathan Leitschuh氏がMac用Zoomクライアントにリモートで悪用可能な脆弱性を発見しました。これにより、悪意のあるWebサイトがユーザの許可なくカメラを有効にできてしまいます ?

悪意のあるWebサイトが許可なくカメラを有効できる脆弱性があったため,今回のアップデートでサードパーティのカメラを許可しなくしたようです.

具体的にはmacosアプリにはcom.apple.security.cs.disable-library-validationというパラメータがあり,それは署名が同じチームのサードパーティしか使えないというもので,このパラメータが変更されたようです.

解決策1

最も簡単な解決策は,ブラウザ版(Chrome)のZoomを使用することです. 自分も最近まで知らなかったのですが,ブラウザだけでもZoomは使用できるようです.ZoomのURLを開くと下記の画面になると思いますが,赤線で囲ったclick hereを押すとブラウザ上でZoomができるようになります.

スクリーンショット 2020-04-30 13.52.34.png

今回のアップデートはmacosアプリだけのものなので,ブラウザで行う場合は関係ないということです.
ちなみにChromeでは別プロセスでカメラアクセスを許可しているらしく,脆弱性はクリアしていると聞きました.(これに関してはちゃんと確認していないです.)

解決策2

macosアプリのzoomで仮想カメラを使用する方法です.
今回のアップデートでは,署名が同じチームのサードパーティしかアクセスできなくなったということは,アプリの署名を消してしまうだけで解決します.
気をつけてほしいのは,アプリの署名を消していまうことで「悪意のあるWebサイトがユーザの許可なくカメラを有効にできてしまう」という脆弱性が発生してしまう可能性があるので,細心の注意を払ってほしいです.

下記がアプリの署名を消すコマンドになります.Terminalを開いて,下記のコマンドを実行するだけで,仮想カメラが使えるようになります.

codesign --remove-signature /Applications/zoom.us.app

--追記--
上記のコマンドを実行したら,署名がなくなるので,マイク・カメラの使用や画面収録のアクセス権を許可するかどうかのポップアップが再び表示されます.その際,画面収録のアクセスを許可をしたのに,アプリ上で画面共有ができないという不具合が私の環境で起こりました.それは「セキュリティとプライバシー」の画面で,一度アクセス許可のチェックを外して,もう一度入れたら使えるようになりました.

謝辞

Twitterで@seanchas_t さんに教えていただきました.ありがとうございます!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

綺麗なGIFアニメを作る(Macで画面録画して作る)

はじめに

FFmpegで動画ファイルから、綺麗なGIFアニメが作れます。
結論から書いてしまうと、「FFmpegで綺麗なGIFにするためのパレットを自動作成し、適用」でOKです。
FFmpegのコマンド入力のみで完結するので、一度覚えてしまえば簡単です。

  • FFmegで綺麗なGIFアニメを作る方法。
  • macOSの機能で画面録画して、動画ファイルを作成。
  • 動画ファイルをFFmpegでGIFアニメに変換(簡単な編集も)。

についてこの記事ではまとめています。

Macで画面を録画

MacはOSの基本機能commando + shift + 5で画面録画が可能。
録画ファイルは.mov形式でデスクトップに保存される。

Macの画面をビデオに収録する方法 — Appleサポート
https://www.youtube.com/watch?v=v8fwj_OUBVA

FFmpegでGIF変換

FFmpeg(エフエフエムペグ)とは?

動画と音声をコマンドラインで変換できるソフト。

FFmpeg
https://www.ffmpeg.org/

インストール

$ brew install ffmpeg

ターミナルを起動して、HomebrewでFFmpegをインストール。

起動の前に

デスクトップの動画を変換するときは...

$ cd /Users/ユーザー名/Desktop/

macOSの基本機能で画面録画すると、動画ファイルはデスクトップに保存されるので、ターミナルよりcdDesktopへ移動しておくとスムーズ。

基本の変換

基本構文
$ ffmpeg 入力オプション -i 入力ファイル名 出力オプション 出力ファイル名

⬇︎ 変換例(オプションは省略可)

input.movをoutput.gifへ変換
$ ffmpeg -i input.mov output.gif

よく使うコマンド

基本の変換に以下のオプションを組み合わせれば編集も可能。

フレームレート

1秒間に10枚使用
$ ffmpeg -i input.mov -r 10 output.gif

-r 1秒間に使用するフレームレート(コマ数)をfpsで指定。

指定した値で、ファイルサイズと滑らかさが決まる。
値が大きいほどコマ数が増えて滑らかに見えるが、ファイルサイズも大きくなる。
(何も指定しないと、元ファイルと同じfpsになり、重たいgifファイルが出来上がる)

ループ回数

ループさせない
$ ffmpeg -i input.mov -loop -1 output.gif

-loop ループ回数を指定
ループさせない場合は-1、無限ループは0を指定。

切り出し(開始と再生の秒数を指定)

動画の開始5秒目から10秒間を切り出す
$ ffmpeg -i input.mov -t 10 -ss 5 output.gif

-t 切り出したい秒数
-ss 切り出しを開始する頭の秒数

※ 指定する秒数は、動画ファイルをQuickTime Timeplayerで確認しておけばスムーズ。

リサイズ(アスペクト比を維持)

横幅640に合わせて高さを調整(アスペクト比を維持)
$ ffmpeg -i input.mov -vf scale=640:-1 output.gif

-vfscale=横幅:高さで指定(-vfはビデオフィルタ)
自動で設定したいほうに-1を指定。

リサイズ(サイズを指定)

横幅640x高さ320
$ ffmpeg -i input.mov -s 640x320 output.gif

-s横幅x高さで指定
自動で設定したいほうに-1を指定。

組み合わせて実行

組み合わせ
$ ffmpeg -i input.mov -r 10 -loop -1 -vf scale=640:-1 -t 10 -ss 5 output.gif

input.movをoutput.gifに変換
フレームレート:10
ループ:なし
リサイズ:横幅640に合わせて高さを調整(アスペクトを比維持)
切り出し開始:5秒目から
切り出したい秒数:10秒間

綺麗なGIFアニメにする方法

$ ffmpeg -i input.mov -vf "fps=10, scale=640:-1, split[a][b]; [a]palettegen[c]; [b][c]paletteuse" output.gif

全てのフレームから最適パレットな作成し、適用することで綺麗なGIFアニメになる。
-vfオプションにsplit[a][b]; [a]palettegen[c]; [b][c]paletteuseを指定すると、カスタムパレットを生成し適用する。

パレットを使う場合、フレームレートリサイズ-vfオプションに指定してしまう。
フレームレート:fps=10
リサイズ:scale=640:-1

こちらの記事が参考になりました。
How do I convert a video to GIF using ffmpeg, with reasonable quality?
https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality

切り出しとループも組み合わせる

$ ffmpeg -i input.mov -vf "fps=10, scale=640:-1, split[a][b]; [a]palettegen[c]; [b][c]paletteuse" -loop -1 -t 10 -ss 5 output.gif

紹介した内容をすべて組み合わせた全部入り。

参考

Macの画面をビデオに収録する方法 — Appleサポート
Mac で画面を収録する方法
それFFmpegで出来るよ!
FFmpegで動画をGIFに変換
How do I convert a video to GIF using ffmpeg, with reasonable quality?

おわりに

画面の操作や手順の説明したいけど、文字だけでは伝わりにくい...
そんなとき動画で説明できると、伝わりやすく便利かと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macで画面録画して綺麗なGIFアニメを作る

macOSの基本機能で画面録画して動画ファイルを作り、FFmpegで綺麗なGIFアニメに変換します。

Macで画面を録画

MacはOSの基本機能commando + shift + 5で画面録画が可能。
録画ファイルは.mov形式でデスクトップに保存される。

Macの画面をビデオに収録する方法 — Appleサポート
https://www.youtube.com/watch?v=v8fwj_OUBVA

FFmpegでGIF変換

FFmpeg(エフエフエムペグ)とは?

動画と音声をコマンドラインで変換できるソフト。

インストール

$ brew install ffmpeg

ターミナルを起動して、HomebrewでFFmpegをインストール。

起動の前に

デスクトップの動画を変換するときは...

$ cd /Users/ユーザー名/Desktop/

macOSの基本機能で画面録画すると、動画ファイルはデスクトップに保存されるので、ターミナルよりcdDesktopへ移動しておくとスムーズ。

基本の変換

基本構文
$ ffmpeg 入力オプション -i 入力ファイル名 出力オプション 出力ファイル名

⬇︎ 変換例(オプションは省略可)

input.movをoutput.gifへ変換
$ ffmpeg -i input.mov output.gif

よく使うコマンド

基本の変換に以下のオプションを組み合わせれば編集も可能。

フレームレート

1秒間に10枚使用
$ ffmpeg -i input.mov -r 10 output.gif

-r 1秒間に使用するフレームレート(コマ数)をfpsで指定。

指定した値で、ファイルサイズと滑らかさが決まる。
値が大きいほどコマ数が増えて滑らかに見えるが、ファイルサイズも大きくなる。
(何も指定しないと、元ファイルと同じfpsになり、重たいgifファイルが出来上がる)

ループ回数

ループさせない
$ ffmpeg -i input.mov -loop -1 output.gif

-loop ループ回数を指定
ループさせない場合は-1、無限ループは0を指定。

切り出し(開始と再生の秒数を指定)

動画の開始5秒目から10秒間を切り出す
$ ffmpeg -i input.mov -t 10 -ss 5 output.gif

-t 切り出したい秒数
-ss 切り出しを開始する頭の秒数

※ 指定する秒数は、動画ファイルをQuickTime Timeplayerで確認しておけばスムーズ。

リサイズ(アスペクト比を維持)

横幅640に合わせて高さを調整(アスペクト比を維持)
$ ffmpeg -i input.mov -vf scale=640:-1 output.gif

-vfscale=横幅:高さで指定(-vfはビデオフィルタ)
自動で設定したいほうに-1を指定。

リサイズ(サイズを指定)

横幅640x高さ320
$ ffmpeg -i input.mov -s 640x320 output.gif

-s横幅x高さで指定
自動で設定したいほうに-1を指定。

組み合わせて実行

組み合わせ
$ ffmpeg -i input.mov -r 10 -loop -1 -vf scale=640:-1 -t 10 -ss 5 output.gif

input.movをoutput.gifに変換
フレームレート:10
ループ:なし
リサイズ:横幅640に合わせて高さを調整(アスペクトを比維持)
切り出し開始:5秒目から
切り出したい秒数:10秒間

もっとキレイなGIFアニメにする方法

$ ffmpeg -i input.mov -vf "fps=10, scale=640:-1, split[a][b]; [a]palettegen[c]; [b][c]paletteuse" output.gif

全てのフレームから最適パレットな作成し、適用することで綺麗なGIFアニメになる。
-vfオプションにsplit[a][b]; [a]palettegen[c]; [b][c]paletteuseを指定すると、カスタムパレットを生成し適用する。

パレットを使う場合、フレームレートリサイズ-vfオプションに指定してしまう。
フレームレート:fps=10
リサイズ:scale=640:-1

切り出しとループも組み合わせる

$ ffmpeg -i input.mov -vf "fps=10, scale=640:-1, split[a][b]; [a]palettegen[c]; [b][c]paletteuse" -loop -1 -t 10 -ss 5 output.gif

参考

Macの画面をビデオに収録する方法 — Appleサポート
Mac で画面を収録する方法
それFFmpegで出来るよ!
FFmpegで動画をGIFに変換
How do I convert a video to GIF using ffmpeg, with reasonable quality?

おわりに

画面の操作や手順の説明したいけど、文字だけでは伝わりにくい...
そんなとき動画で説明できると、伝わりやすく便利かと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macで画面録画して、綺麗なGIFアニメを作る

はじめに

FFmpegで動画ファイルから、綺麗なGIFアニメが作れます。
結論から書いてしまうと、「FFmpegで綺麗なGIFにするためのパレットを自動作成し、適用」でOKです。
FFmpegのコマンド入力のみで完結するので、一度覚えてしまえば簡単です。

  • FFmegで綺麗なGIFアニメを作る方法。
  • macOSの機能で画面録画して、動画ファイルを作成。
  • 動画ファイルをFFmpegでGIFアニメに変換(簡単な編集も)。

についてこの記事ではまとめています。

Macで画面を録画

MacはOSの基本機能commando + shift + 5で画面録画が可能。
録画ファイルは.mov形式でデスクトップに保存される。

Macの画面をビデオに収録する方法 — Appleサポート
https://www.youtube.com/watch?v=v8fwj_OUBVA

FFmpegでGIF変換

FFmpeg(エフエフエムペグ)とは?

動画と音声をコマンドラインで変換できるソフト。

FFmpeg
https://www.ffmpeg.org/

インストール

$ brew install ffmpeg

ターミナルを起動して、HomebrewでFFmpegをインストール。

起動の前に

デスクトップの動画を変換するときは...

$ cd /Users/ユーザー名/Desktop/

macOSの基本機能で画面録画すると、動画ファイルはデスクトップに保存されるので、ターミナルよりcdDesktopへ移動しておくとスムーズ。

基本の変換

基本構文
$ ffmpeg 入力オプション -i 入力ファイル名 出力オプション 出力ファイル名

⬇︎ 変換例(オプションは省略可)

input.movをoutput.gifへ変換
$ ffmpeg -i input.mov output.gif

よく使うコマンド

基本の変換に以下のオプションを組み合わせれば編集も可能。

フレームレート

1秒間に10枚使用
$ ffmpeg -i input.mov -r 10 output.gif

-r 1秒間に使用するフレームレート(コマ数)をfpsで指定。

指定した値で、ファイルサイズと滑らかさが決まる。
値が大きいほどコマ数が増えて滑らかに見えるが、ファイルサイズも大きくなる。
(何も指定しないと、元ファイルと同じfpsになり、重たいgifファイルが出来上がる)

ループ回数

ループさせない
$ ffmpeg -i input.mov -loop -1 output.gif

-loop ループ回数を指定
ループさせない場合は-1、無限ループは0を指定。

切り出し(開始と再生の秒数を指定)

動画の開始5秒目から10秒間を切り出す
$ ffmpeg -i input.mov -t 10 -ss 5 output.gif

-t 切り出したい秒数
-ss 切り出しを開始する頭の秒数

※ 指定する秒数は、動画ファイルをQuickTime Timeplayerで確認しておけばスムーズ。

リサイズ(アスペクト比を維持)

横幅640に合わせて高さを調整(アスペクト比を維持)
$ ffmpeg -i input.mov -vf scale=640:-1 output.gif

-vfscale=横幅:高さで指定(-vfはビデオフィルタ)
自動で設定したいほうに-1を指定。

リサイズ(サイズを指定)

横幅640x高さ320
$ ffmpeg -i input.mov -s 640x320 output.gif

-s横幅x高さで指定
自動で設定したいほうに-1を指定。

組み合わせて実行

組み合わせ
$ ffmpeg -i input.mov -r 10 -loop -1 -vf scale=640:-1 -t 10 -ss 5 output.gif

input.movをoutput.gifに変換
フレームレート:10
ループ:なし
リサイズ:横幅640に合わせて高さを調整(アスペクトを比維持)
切り出し開始:5秒目から
切り出したい秒数:10秒間

綺麗なGIFアニメにする方法

$ ffmpeg -i input.mov -vf "fps=10, scale=640:-1, split[a][b]; [a]palettegen[c]; [b][c]paletteuse" output.gif

全てのフレームから最適パレットな作成し、適用することで綺麗なGIFアニメになる。
-vfオプションにsplit[a][b]; [a]palettegen[c]; [b][c]paletteuseを指定すると、カスタムパレットを生成し適用する。

パレットを使う場合、フレームレートリサイズ-vfオプションに指定してしまう。
フレームレート:fps=10
リサイズ:scale=640:-1

こちらの記事が参考になりました。
How do I convert a video to GIF using ffmpeg, with reasonable quality?
https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality

切り出しとループも組み合わせる

$ ffmpeg -i input.mov -vf "fps=10, scale=640:-1, split[a][b]; [a]palettegen[c]; [b][c]paletteuse" -loop -1 -t 10 -ss 5 output.gif

紹介した内容をすべて組み合わせた全部入り。

参考

Macの画面をビデオに収録する方法 — Appleサポート
Mac で画面を収録する方法
それFFmpegで出来るよ!
FFmpegで動画をGIFに変換
How do I convert a video to GIF using ffmpeg, with reasonable quality?

おわりに

画面の操作や手順の説明したいけど、文字だけでは伝わりにくい...
そんなとき動画で説明できると、伝わりやすく便利かと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macで画面録画してGIFアニメを作る

macOSの基本機能で画面録画して動画ファイルを作り、FFmpegでGIFアニメに変換します。

Macで画面を録画

MacはOSの基本機能commando + shift + 5で画面録画が可能。
録画ファイルは.mov形式でデスクトップに保存される。

Macの画面をビデオに収録する方法 — Appleサポート
https://www.youtube.com/watch?v=v8fwj_OUBVA

FFmpegでGIF変換

FFmpeg(エフエフエムペグ)とは?

動画と音声をコマンドラインで変換できるソフト。

インストール

$ brew install ffmpeg

ターミナルを起動して、HomebrewでFFmpegをインストール。

起動の前に

デスクトップの動画を変換するときは...

$ cd /Users/ユーザー名/Desktop/

macOSの基本機能で画面録画すると、動画ファイルはデスクトップに保存されるので、ターミナルよりcdDesktopへ移動しておくとスムーズ。

基本の変換

基本構文
$ ffmpeg 入力オプション -i 入力ファイル名 出力オプション 出力ファイル名

⬇︎ 変換例(オプションは省略可)

input.movをoutput.gifへ変換
$ ffmpeg -i input.mov output.gif

よく使うコマンド

基本の変換に以下のオプションを組み合わせれば編集も可能。

フレームレート

1秒間に10枚使用
$ ffmpeg -i input.mov -r 10 output.gif

-r 1秒間に使用するフレームレート(コマ数)をfpsで指定。

指定した値で、ファイルサイズと滑らかさが決まる。
値が大きいほどコマ数が増えて滑らかに見えるが、ファイルサイズも大きくなる。
(何も指定しないと、元ファイルと同じfpsになり、重たいgifファイルが出来上がる)

ループ回数

ループさせない
$ ffmpeg -i input.mov -loop -1 output.gif

-loop ループ回数を指定
ループさせない場合は-1、無限ループは0を指定。

切り出し(開始と再生の秒数を指定)

動画の開始5秒目から10秒間を切り出す
$ ffmpeg -i input.mov -t 10 -ss 5 output.gif

-t 切り出したい秒数
-ss 切り出しを開始する頭の秒数

※ 指定する秒数は、動画ファイルをQuickTime Timeplayerで確認しておけばスムーズ。

リサイズ(アスペクト比を維持)

横幅640に合わせて高さを調整(アスペクト比を維持)
$ ffmpeg -i input.mov -vf scale=640:-1 output.gif

-vfscale=横幅:高さで指定
自動で設定したいほうに-1を指定。

リサイズ(サイズを指定)

横幅640x高さ320
$ ffmpeg -i input.mov -s 640x320 output.gif

-s横幅x高さで指定
自動で設定したいほうに-1を指定。

組み合わせて実行

$ ffmpeg -i input.mov -r 10 -loop 0 -vf scale=640:-1 -t 10 -ss 5 output.gif

input.movをoutput.gifに変換
フレームレート:10
ループ:なし
リサイズ:横幅640に合わせて高さを調整(アスペクトを比維持)
切り出し開始:5秒目から
切り出したい秒数:10秒間

参考

Macの画面をビデオに収録する方法 — Appleサポート
Mac で画面を収録する方法
それFFmpegで出来るよ!
FFmpegで動画をGIFに変換

おわりに

画面の操作や手順の説明したいけど、文字だけでは伝わりにくい...
そんなとき動画で説明できると、伝わりやすく便利かと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Favorite】Rails いいね機能 実装

画面収録 2020-04-30 0.34.38.mov.gif

【ゴール】

ユーザーに投稿に対していいね機能を実装する
いいねを押すとハートが赤くなる

参考:https://qiita.com/nojinoji/items/2c66499848d882c31ffa

【メリット】

UI、UXの向上
アソシエーションの理解度向上

【開発環境】

■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

【実装】 "user" "post"機能実装は割愛

  1. favorite model作成
mac.terminal
$ rails g model Favorite
  1. アソシエーション 追記

※ user : favorite = 1 : 多 
※ post : favorite = 1 : 多

config/post.rb
has_many :favorites
def favorited_by?(user)
    favorites.where(user_id: user.id).exists?
end
config/user.rb
has_many :favorites
config/favorite.rb
belongs_to :user
belongs_to :post

route 追記
※ "favorite" は "post" に関連しているのでルートをネスト(親子)させる

config/routes.rb
resources :posts do
    resources :favorites , only: [:create , :destroy]
end

favorite controller作成
※ "create" , "destroy"も一緒に作成

mac.terminal
$ rails g controller Favorites create destroy

favorite controller記述
① , ②で user_id post_id をparameterに渡す

favorites_controller.rb
class FavoritesController < ApplicationController
  def create
    @post = Post.find(params[:post_id]) ①
    favorite = @post.favorites.new(user_id: current_user.id) ②
    favorite.save
    flash[:success] = "Liked post"
    redirect_to request.referer
  end

  def destroy
    @post = Post.find(params[:post_id]) ①
    favorite = current_user.favorites.find_by(post_id: @post.id) ②
    favorite.destroy
    redirect_to request.referer
  end
end

view記述
※ modelで記述 ”@post.favorited_by?” を使用

post/show.html/erb
<% if @post.favorited_by?(current_user) %>
   <%= link_to post_favorite_path(@post), method: :DELETE do %>
   <i class="fa fa-heart" aria-hidden="true" style="color: red;"></i>
   <%= @post.favorites.count %>like
   <% end %>
<% else %>
  <%= link_to post_favorites_path(@post) , method: :POST do %>
  <i class="fa fa-heart-o" aria-hidden="true"></i>
  <%= @post.favorites.count %>like
  <% end %>
<% end %>

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む