Category tech.

以下のようにすれば良い。タイムコードが入っている動画ファイルはYouTubeアプリでは開けないらしい (Google Photos などでは普通に開ける)

ffmpeg -i '/mnt/c/Users/cho45/Desktop/doremi.mp4' -c:a copy -c:v copy -write_tmcd 0 '/mnt/c/Users/cho45/Desktop/doremi-removed-tmcd.mp4'

なんでPCからアップロードしないの?


PCからショート動画をアップロードする場合、なぜかサムネイルを指定できないという大きな欠点がある。なのでサムネイルが適切に設定されない場合、モバイル版の YouTube アプリを使ってアップロードする必要がある。

他の方法は?

Google Photos では開けるので、Google Photos で開いて、コントラストを1だけ変更したりなんでもいいのでちょっと編集して「コピーを保存」すれば YouTube で開ける動画にはなる。うまくはいくけど再エンコード走るのでだるい。

参考

日本語ではどうしても解決せず「android youtube unable to preview」で解決

ref.

  1. トップ
  2. tech
  3. DaVinci Resolve で作成した動画を Android YouTube でアップロードしようとすると「動画をプレビューできません」となる

症状としては

  • ファイル転送 / Android Auto モードで USB 接続し
  • Windows Explorer からコピーしたいデバイスのフォルダを開き
  • ほとんどのファイルのコピーは成功するが (jpg や txt など)
  • mp4 ファイルだけ転送することができない
  • エラーの表示などはまったくないが Explorer からエラー音はなる
  • 転送できないファイルを .txt に拡張子をかえると、コピーダイアログまでは出るようになるが、やはりコピーはできない

どうあがいても無理。MTP など他のモードでも無理。Android のファイル転送モードはやたら遅くて、なんか変な制御がかかっているんだろうけど、挙動がおかしすぎるのでできるだけ使わないほうが良い……

他の解決方法: Google クイック共有 / Quick Share / 旧ニアバイシェア

たぶん代替としてはこれが一番簡単かつ最速
https://support.google.com/android/answer/9286773?hl=ja

他の解決方法: Google Drive 経由

次点で間違いなく解決はできるがめんどくさい + Google Drive に保存する必要がなくても、一時的に保存する必要がある

  1. トップ
  2. tech
  3. Android と USB 接続したとき、どうあがいても一部のファイルを転送できない

motemen さんの ターミナルの作業中ディレクトリにOSの「ファイルを開く」からもアクセスしたい を見ていいなと思ったので自分もやってみた。ただ、WSL 内で動く tmux の作業ディレクトリを Windows 側に同期したいので、若干ややこしいことをすることになる。

以下のように wsl-update-cwds をつくる。

#!/usr/bin/env ruby

is_wsl = ENV.has_key?('WSLENV')
if !is_wsl
    exit 0
end

# PWSH = '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe'
PWSH = '/mnt/c/Program Files/PowerShell/7/pwsh.exe'

dirs = `tmux list-windows -F '\#{pane_current_path}'`.split("\n").uniq

command = <<~CMD
$WshShell = New-Object -COMObject WScript.Shell
function Create-Shortcut($targetPath, $shortcutPath) {
	$Shortcut = $WshShell.CreateShortcut($shortcutPath)
	$Shortcut.TargetPath = $targetPath
	$Shortcut.Save()
}

Remove-Item -Path $env:USERPROFILE/cwds/*.lnk
CMD
dirs.each do |dir|
    basename =  File.basename(dir)
    win_path = `wslpath -aw '#{dir}'`.chomp
    command << "Create-Shortcut '#{win_path}' $env:USERPROFILE/cwds/#{basename}.lnk\n"
end

# Since pwsh takes a bit of time to start up, run it asynchronously using spawn.
pid = spawn(PWSH, '-NoProfile', '-NoLogo', '-Command', command)
  1. tmux から作業ディレクトリをひっぱってくる
  2. wslpath コマンドで Windows 側のパスに変換する
  3. ↑の情報から PowerShell のコードを生成し、pwsh でショートカットとして生成する

なんでショートカットなのか? というと Junction だと UNC パスにリンクを貼れず、Symlink だと管理者権限が必要になって嫌なので、ほかに方法がない。

あとは zsh の chpwd フックで実行させる。WSLENV 環境変数を見て、存在しないなら実行しないように

chpwd () {
	if [[ -n "${WSLENV+x}" ]]; then
		# in WSL
		$HOME/dotfiles/bin/wsl-update-cwds
	fi
}
  1. トップ
  2. tech
  3. (zsh/tmux/WSL) ターミナルの作業中ディレクトリにOSの「ファイルを開く」からもアクセスしたい