adbird(広告鳥) 備忘録

端末(ターミナル)で音楽を聴く(動画を観る)

環境はUbuntu。BGMをかけっぱなしにするに、重たいソフトは立ち上げたくないので。

ローカル(パソコン内)の音楽ファイルを再生

mpv playerをインストール。

$ sudo apt install mpv

再生

聴きたい音楽の入っているフォルダに移動して、端末を開いて、以下を実行。

$ mpv --volume 50 ./

特定の拡張子のものだけ再生したい時は、$ mpv --volume 50 *.ogg$ mpv --volume 50 *.mp3 なりで再生。

--volume 50 は再生開始時のボリューム。お好みで。

僕の環境だと、これを付けないと大音量で再生されてしまうので…。

ミュージックフォルダ内の全ての音楽・動画をシャッフル再生の場合は以下のコマンド。

$ mpv --shuffle --volume 50 ~/ミュージック/

操作方法

キーボードで操作する。

公式サイトのKeyboard Control を参照のこと。

僕が主に使うのは、以下の操作。

  • ボリューム上げる    : 0
  • ボリューム下げる    : 9
  • プレイリストの次の曲へ : Enter または >
  • プレイリストの前の曲へ : <
  • 一時停止(ポーズ)   : p
  • ミュート        : m
  • 終了          : Ctrl + c

YouTube動画を1つだけ再生

上記でmpvをインストール済みとして、1つのYouTube動画を再生するだけなら、

$ mpv 'Youtube動画のリンク'  --volume 50

でOK。

ただし、なぜか再生できないものもある…。

YouTubeのプレイリストを連続再生

YouTubeの音楽動画をCMなしで連続再生する方法。

youtube-dlインストール

上記の mpv player の他に、youtube-dlが必要。

youtube-dl はUbuntuの公式レポジトリから入れてもいいのだけど、他のソフトを使用する際に(結局そのソフトはうまく動いてくれなかった)、ヴァージョンが古いんじゃない?って注意されたので、最新版を入れた。

ytdl-org/youtube-dl に従って、以下でインストールした。

$ sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
$ sudo chmod a+rx /usr/local/bin/youtube-dl

再生

YouTubeのプレイリスト(YouTubeが勝手に作ってくれるミックスリストを含む)のlist=〜のところをコピーして、'ytdl:// 〜 'として貼り付けて実行。

例えば、(わかりやすく list=〜 の前後にスペースを入れてる)

https://www.youtube.com/watch?v=kTvo4pjO4Uk&  list=RDkTvo4pjO4Uk  &start_radio=1&t=200

からコピーして、

$ mpv --no-video --volume 50 ytdl://RDkTvo4pjO4Uk

として実行。

  • --no-video : 映像なし。

以下のようにすれば、

$ mpv --volume 50 --border=no --ontop --geometry=512x288 ytdl://RDkTvo4pjO4Uk

動画の画面を小さくして、つねにパソコン画面の最前面におくことができる。

画面の右下にでもおけば、パソコンでいろんな作業しながら、動画を見ることができる。

  • --border=no :動画のウィンドウの枠をなくす。
  • --ontop   :動画を最前面に置く。
  • --geometry=512x288 :動画のサイズを512x288(アスペクト比は16:9)に固定。アスペクト比については、ここここを参考に。

f:id:adbird:20200122194528p:plain
作業しながらmpvで動画視聴

Android 上の Termux でも!

mpvインストール

$ pkg install mpv

youtube-dlのインストールは少々、違う。

まずは下準備。すでにインストールされているのもあるはず。

$ pkg install curl
$ pkg install python
$ pkg install ffmpeg

youtube-dl本体をインストールして、実行権限を付与。

$ curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /data/data/com.termux/files/usr/bin/youtube-dl
$ chmod a+rx /data/data/com.termux/files/usr/bin/youtube-dl

詳しくはHow to Install youtube-dl on Termuxを参考に。

再生方法は基本、上記と同じ。

ただし、何もしないとスマホがスリープ状態になると、mpvもというか、Termuxが終了してしまうので、

$ termux-wake-lock

をすれば、スマホがスリープになっても再生を続けてくれる。ちなみに解除は $ termux-wake-unlock

参考リンク:TermuxでWakeLockを有効化

Termuxはちゃんと

$ exit

で終了してあげること。そうしないと、コマンド入力の履歴や上記のwake-lockの設定が残ってくれないっぽい。

画像に文字を入れる

画像に文字を入れることができたら、スライドショー(複数画像からスライドショー動画(BGM付き)を作成)の一番最初の画像をタイトル画像にできるんだけどなぁ…と思って、画像に文字を入れる方法を調べたら、ImageMagickのconvertコマンドでできることが分かった。

 $ convert -font M+-1c-light -pointsize 130 -fill white -gravity Center -annotate +0+0 "文字を入力" input.jpg output.jpg

画像に文字を入れてから、複数画像からスライドショー動画(BGM付き)を作成

フォントでエラーが出る場合、指定が失敗している可能性が高いので、以下のようにフォント検索。

$ convert -list font|grep M+
  Font: M+-1c
    family: M+ 1c
  Font: M+-1c-black
    family: M+ 1c
  Font: M+-1c-bold
    family: M+ 1c
   ︙

上記は M+ フォント を検索してる。

Font: M+-1c であれば、-font M+-1c と指定してあげれば、大丈夫なはず。

GIMPなどを使えばいいんだろうけど、本当にシンプルにタイトル文字などを入れるだけなら、この方法で十分。

ffmpegでTS(m2ts)ファイルをmp4に変換 2019年版

シンプルな方法(音声エンコードなし)

$ ffmpeg -y -vsync 1 -i 入力.m2ts -f mp4 -vcodec libx264 -map 0:0 -map 0:1 -s 1280x720 -aspect 16:9 -acodec copy -bsf:a aac_adtstoasc 出力.mp4

短いファイル名一つなら上記コマンドでも大して苦ではないけど、長いファイル名や複数の動画を変換するにはファイル名の入力やコピペも面倒。

以下はその手間をなくしてもっと簡単にする方法。

なお、環境はUbuntu18.04。

シェルスクリプト

tstomp4.sh スクリプトを作る。

for f in *.m2ts; do

# ①音声エンコードなし 開始時間のみ指定する
#ffmpeg -y -vsync 1 -i ${f%.*}.m2ts -f mp4 -vcodec libx264 -map 0:0 -map 0:1 -s 1280x720 -aspect 16:9 -acodec copy -bsf:a aac_adtstoasc -ss $1 ${f%.*}.mp4

#②音声エンコードなし 開始時間と終了時間を指定する。
ffmpeg -y -vsync 1 -ss $1 -i ${f%.*}.m2ts -f mp4 -vcodec libx264 -map 0:0 -map 0:1 -s 1280x720 -aspect 16:9 -acodec copy -bsf:a aac_adtstoasc -t $(($2*60+$3-$1)) ${f%.*}.mp4

# ③音声aacエンコード 開始時間のみ指定する
#ffmpeg -y -vsync 1 -ss $1 -i ${f%.*}.m2ts -f mp4 -vcodec libx264 -map 0:0 -map 0:1 -s 1280x720 -aspect 16:9 -codec:a aac -bsf:a aac_adtstoasc -strict -2 ${f%.*}.mp4

# ④音声aacエンコード 開始時間と終了時間を指定する。
#ffmpeg -y -vsync 1 -ss $1 -i ${f%.*}.m2ts -f mp4 -vcodec libx264 -map 0:0 -map 0:1 -s 1280x720 -aspect 16:9 -codec:a aac -bsf:a aac_adtstoasc -strict -2 -t $(($2*60+$3-$1)) ${f%.*}.mp4

done

上記では、②を有効にしていて、それ以外は無効にしている状態。

  • for f in *.m2ts; do : フォルダ内にある全ての「.m2ts」に対して実行する。
  • ${f%.*}.m2ts ${f%.*}.mp4 : 上記で探した「.m2ts」データの名前(拡張子をのそく)が ${f%.*} に入る。
  • $1 : 後述の開始時間(秒)が入る。
  • $2 : 後述の終了時間(分)が入る。
  • $3 : 後述の終了時間(秒)が入る。

実行

任意のフォルダに上記 tstomp4.sh スクリプトと、変換したいm2tsファイルを入れる。

開始時間のみ指定する場合

ようは動画の冒頭部分をカットする場合。(冒頭をカットせず、一番最初から変換する場合は、開始時間を 0 にする。)

①か③のコメントアウトを外して(行の最初の # を削除する。for f in *.m2ts; dodone 以外の他の行は # をつけてコメントアウトする)、次を実行。

$sh tstomp4.sh [開始時間(秒)]

例えば、開始時間が10秒の場合、次の通り。

$sh tstomp4.sh 10

開始時間と終了時間を指定する場合

冒頭分だけでなく、お尻の部分もカットする場合。

②か④のコメントアウトを外して(行の最初の # を削除する。for f in *.m2ts; dodone 以外の他の行は # をつけてコメントアウトする)、次を実行。

$ sh tstomp4 [開始時間(秒)] [終了時間(分)] [終了時間(秒)]

例えば、15秒のところから開始して、25分30秒のところで終了する場合は次の通り。

$ sh tstomp4 15 25 30

ここでの「終了時間」とは、元のm2tsファイルの動画のシークバー上で表示される時間。

ffmpegは、例えば、-ss 10-t 30 のオプションを使った場合、元の動画の冒頭10秒を切り取り、そこから30秒間が変換されるということになる。つまり、終了時点は元の動画のシークバーで表示されるところの40秒(10秒+30秒)の時点となる。

例えば、元の動画の冒頭10秒をカットして、元の動画のシークバーで表示されるところの50秒時点で変換を終わらせたい場合、オプションは-ss 10-t 40 にしないといけない。

しかし、長い動画の場合、いちいち「開始から○○秒後」と終了時間を計算するのが面倒くさいので、その手間を省くために -t $(($2*60+$3-$1)) とした。


複数画像からスライドショー動画(BGM付き)を作成

追記:新しい記事(OpenShot 動画エディターで画像スライドショー動画(BGM付き)を作成)で紹介した方法の方がもっと簡単にできる。



スライドショーにしたい画像が全て同じサイズであれば、最後の 連番画像からスライドショー動画を作成 を読んでも構わない。

しかし、縦向き・横向きの画像をごちゃまぜにして後述の ffmpeg を実行すると、縦長の画像が横に引き伸ばされたりするなどして、画像が歪んでしまう。
これはどうやら、ffmpegが最初の画像の縦横のサイズを読み込み、後続の画像を最初の画像のサイズに合わせるからっぽい。

なので、ffmpeg実行の前に、全ての画像を、スライドショーの最初の画像のサイズに合わせる必要がある。

任意のフォルダに画像を入れる

スライドショーにしたい画像(縦横ごちゃまぜのままでいい)を任意のフォルダ内にコピーする。

画像ファイルを連番でリネーム

画像ファイルを、001.jpg 002.jpg,…というように、0から始まる3ケタの数字の連番にリネームする。
連番にしておかないと、下記方法で作成するスライドショー動画が途中で止まってしまうので注意。

Ubuntuなら、ファイルマネージャー「ファイル」(旧 Nautilus)で画像を全て選択して右クリックして、「名前の変更」から連番にする。

f:id:adbird:20200707174253p:plain

拡張子を「jpg」に統一

もし拡張子が「JPG」や「jpg」とバラバラだったら、拡張子を統一しておく。以下は jpeg の拡張子を jpg に一括置換する方法。

$ rename 's/.jpeg/.jpg/' *.jpeg

画像のサイズを揃える

以下、ここでの前提。

  • スライドショーにしたい画像には、以下の画像が混在している状態。
    • 横長幅1600 x 高さ1200。 単位ピクセル、以下同じ)
    • 縦長幅1200 x 高さ1600)の画像
  • スライドショーは横長(1600 x 1200)の画像から開始する。

つまり、やるべきは

  • 縦長の画像(1200 x 1600)を、横長の画像サイズ(1600 x 1200)にリサイズ

することである。

f:id:adbird:20191204232444j:plain

高さを揃える

※ mogrify コマンドは画像を上書き保存するので気をつけること。元の画像は必ず別のフォルダでバックアップを取っておくこと。

全ての画像の高さを、横長画像の高さの1200ピクセルに揃えて、リサイズする。

$ mogrify -resize x1200 *.jpg

-resize x1200 : -resize [幅]x[高さ]
幅を指定しないことで縦横のサイズ比を維持したまま、高さに合わせてリサイズしてくれる。

これで幅1200 x 高さ1600の縦長画像が、幅900 x 高さ1200 の縦長画像になる。

このままスライドショーを作ってもやはり画像が歪むため、幅も揃えないとダメ。

幅(キャンバス)を揃える

上記でリサイズした縦長の画像(900 x 1200)の大きさは変えないまま、キャンバスだけを幅1600に広げる。

$ mogrify -extent 1600x1200 -gravity center -background black *.jpg

-extent 1600x1200 : キャンバスを1600x1200に。
-gravity center  : 画像を中央に配置。
-background black : キャンバスの色を黒に。

これで画像サイズが全て 1600 x 1200 に揃えられた。 f:id:adbird:20191204232612j:plain

連番画像からスライドショー動画を作成

スライドショー動画に変換する。最終的にBGMのついたスライドショー動画を作成するには、以下の①から③の順に作っていく。

①BGMなしのスライドショー動画

まずはBGMなしのスライドショー動画をつくって、動画の時間を調べる。

$ ffmpeg -f image2 -r 0.3 -i %03d.jpg -vcodec libx264 -pix_fmt yuv420p video.mp4

-f image2 : jpeg 画像であることを明示。多分、なくてもOK。
-r 0.3 : 1秒間に何枚の画像を表示するか。数値が小さいほど、スライドショーはゆっくりになる。
-i %03d.jpg : 0から始まる3ケタの数字で表現されるファイル名(001.jpg,…)
-vcodec libx264 : H.264エンコード
-pix_fmt yuv420p : これがないとtwitterにアップロードできない

②スライドショーにつける音声データを準備

スライドショー動画の時間が分かったら、著作権フリーな音楽やBGMを フリーBGMサイト DOVA-SYNDROME などから落としてきて、短くカットしたり、フェードアウトさせたりして、スライドショー動画の長さに合わせた音声データにする。

以下は長い音楽を2分間の長さにして、最後に3秒間のフェードアウトを加える方法。

$ ffmpeg -ss 0 -i music_input.mp3 -af "afade=t=out:st=117:d=3" -t 00:02:00 music.mp3

-ss 0:切り取り開始時間。
-af "afade=t=out:st=117:d=3":フェードアウトを開始する時間とフェードアウト時間。ここでは冒頭から117秒後に3秒間フェードアウト。
-t 00:02:00:2分間で、切り取り終了時間。

③BGMありのスライドショー動画

上記で編集した音楽データを使って、あらためてスライドショー動画を作成する。

$ ffmpeg -f image2 -r 0.3 -i %03d.jpg -i music.mp3 -vcodec libx264 -pix_fmt yuv420p video.mp4

-f image2 : jpeg 画像であることを明示。多分、なくてもOK。
-r 0.3 : 1秒間に何枚の画像を表示するか。数値が小さいほど、スライドショーはゆっくりになる。
-i %03d.jpg : 0から始まる3ケタの数字で表現されるファイル名(001.jpg,…)
-i music.mp3 : BGM・音楽データ。
-vcodec libx264 : H.264エンコード
-pix_fmt yuv420p : これがないとtwitterにアップロードできない

この方法で作った動画を twitter にアップロードしたのが こちら

スライドショーの最初の画像にタイトル文字を入れたいときは、画像に文字を入れる を参照のこと。

参照リンク

阿蘇スカイラインオートキャンプ場『遊牧民』

静かに利用したいので、あまり人が来てほしくないのだけどw、ネット上にここのキャンプ場の情報が少ないので、ここに書いておく。

とはいえ、すでに僕が提供した情報が「はちのす」さんのサイトに

阿蘇スカイラインオートキャンプ場『遊牧民』

にあるので、そちらを読んでいただけたらいいのだけど…。

  • 水洗トイレなし(簡易トイレ or ポットントイレ)。
  • 炊事場は湧水を引っぱってきているだけ。
    • 湧水なので飲めるとは言われけれど、まあ、自己責任…。
  • シャワーなし。
  • 携帯電話・スマホはつながりにくい。

と、まあ、設備はおせじにも整っているとは言えない。

しかし、そのデメリットを凌ぐぐらい、この場所の心地よさがこのキャンプ場にはある(と思う)。

僕が思う、このキャンプ場のいいところ。

  • 利用者が少ないので、静か(別々の年の9月上旬に利用して、2度とも利用者は僕一人w)。
  • やはり、利用者が少ないからか、サイトの芝生も全然荒れておらず、気持ちいい。
  • 気持ちのいい小川が流れている。
  • バイクでのキャンプは1泊1000円と適度な値段。

このキャンプ場で注意すべきこと・やるべきこと!

  • 要予約。管理人(5人で共同でやっているらしい。おそらく入り口に書いてある牧草地管理組合の方々が片手間でやっているのだろう。)は常時いるわけではなく、門も閉まっていることも多いようなので、電話で必ず予約すること。
  • 簡易トイレには蚊などの虫が多いので、キャンプ場についたらすぐに蚊取り線香を置くこと(もちろん、蚊取り線香置きを使って)。これでだいぶ虫がいなくなるので、トイレがやや快適になる。

キャンプ場内の様子

携帯電話の電波が入るのは、↓この場所だけ? 橋を渡って、広いサイトの方は利用したことがなくて、そちらの電波状況は確認するの忘れた。

f:id:adbird:20190916101928j:plain
阿蘇スカイラインオートキャンプ場遊牧民001

f:id:adbird:20190916102429j:plain
阿蘇スカイラインオートキャンプ場遊牧民002

↓炊事場。湧き水を引っぱってきているので飲めるということだったけど、まあ、自己責任で、 f:id:adbird:20190916102433j:plain

f:id:adbird:20190916102626j:plainf:id:adbird:20190916102630j:plain

f:id:adbird:20190916102845j:plainf:id:adbird:20190916102850j:plainf:id:adbird:20190916102853j:plainf:id:adbird:20190916102858j:plainf:id:adbird:20190916102902j:plain f:id:adbird:20190916103034j:plain

YouTubeに動画を上げている方がいたので、それも参考にするといいと思います。