Gopro動画接続

# Youtubeへ動画を上げています。
主には、バイク、スノーボード、観光などの動画をGoProで流しで撮影しています。
仲間内などで閲覧する用に、非公開でYouTubeにアップしています。
このとき、GoProではいくつかのファイルに分かれ、SDカードに動画が保存されています。
動画編集は動画編集ですが、ただ単に連結させ、通しでみたいときに不便です。

# 動画連結スクリプト
ffmpegのインストールはgoogle先生や、諸兄の方々にお任せするとして、
以下のbatファイルを動画ファイルたちがいるディレクトリで実行することで、
一つのmp4にしてくれます。
ffmpegを使い、機械的に連結させますので、無劣化で処理が可能です。

# 追記ffmpegインストール
私の環境では、「ffmpeg-master-latest-win64-gpl-shared」をダウンロードし、
Cドライブ直下に展開、パスを通します。
バージョンは下記の通りです。

    >ffmpeg -version
    ffmpeg version N-107137-gfee765c207-20220619 Copyright (c) 2000-2022 the FFmpeg developers
    built with gcc 11.2.0 (crosstool-NG 1.24.0.533_681aaef)
    configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-shared --disable-static --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20220619
    libavutil      57. 27.100 / 57. 27.100
    libavcodec     59. 33.100 / 59. 33.100
    libavformat    59. 25.100 / 59. 25.100
    libavdevice    59.  6.100 / 59.  6.100
    libavfilter     8. 41.100 /  8. 41.100
    libswscale      6.  6.100 /  6.  6.100
    libswresample   4.  6.100 /  4.  6.100
    libpostproc    56.  5.100 / 56.  5.100

私の環境では上記で動いていますが、「ffmpeg-master-latest-win64-gpl.zip」がいいようです。
私の環境では「ffmpeg-master-latest-win64-gpl」では、動かなかったため、「ffmpeg-master-latest-win64-gpl-shared」を使っています。
下記が参考になります。

https://taziku.co.jp/blog/windows-ffmpeg

公式サイト

https://ffmpeg.org/download.html

公式サイトから、「Windows」→「Windows builds by BtbN」→「ffmpeg-master-latest-win64-gpl.zip」をダウンロードし、中身をCドライブ直下に展開します。

PCのパスを通します。

設定からシステムを開きます。
![スクリーンショット 2024-09-26 110631.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675614/8d7abf85-9e09-077a-d97f-76a911827ab4.png)
システムの詳細設定をクリックします。
![スクリーンショット 2024-09-26 110648.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675614/a76b6480-2db5-5677-3ca2-780e359489e5.png)
環境変数をクリックします。

![スクリーンショット 2024-09-26 110706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675614/31e0d789-0f8d-90c6-69b6-4a78e42e4607.png)
Pathを選択し、編集をクリックします。


![スクリーンショット 2024-09-26 110714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675614/3daca4b2-7ac9-d2aa-fcfb-cf87ff2bf8b4.png)
Cの直下においたffmegのbinのパスを入力します。
画像中では、私のPCの設定「C:\ffmpeg-master-latest-win64-gpl-shared\bin」になっています。

これで準備完了です。


# スクリプトの内容
1.ディレクトリ内のMP4ファイル名一覧を「日時順で」取得
　ファイル名順では、撮影された順番でないので、わけがわからなくなります。
2.ファイル名一覧「temptxt」に書き出し
3.「temptxt」の中身をffmpegが認識できる連結リストを「filelist.txt」に出力
4.連結し、「output.mp4」に出力
処理時間がわかるように、処理開始時、処理終了時の日時を出力する。

下記を.batファイルにして、動画フォルダに保存し、ダブルクリック実行する。


    @echo off
    echo %date% %time%
    dir /od *.mp4 /B > temptxt
    
    for /f %%a in (temptxt) do (
     
      rem 出力
      echo file '%%a'>>filelist.txt
     
    )
    
    ffmpeg -f concat -i filelist.txt -c copy output.mp4
    cd
    echo %date% %time%
    pause






# 角度問題
GoProはジャイロセンサーを備えており、親切に動画の向きを変えてくれる。
しかし、PC上で見ると、天地や左右が入れ替わっていたりする。
このため、上記のスクリプトでは、単純連結のため、角度が統一された動画たちにしか使えない。



# 備忘録：動画のトリミング
ドラレコの動画なんかも同じくファイル区切られるので、応用できる。
ただ、GPS情報など除外して、アップしたいときがある。

https://alpacatech.hateblo.jp/entry/2020/02/16/142044

### 画角のトリミング
これでちょうど、下部のGPS情報は画角の外に出すことができる。
上から982ピクセル、幅は全幅(1920)で出力する。

    ffmpeg -i hogehoge.mp4 -vf crop=1920:982:0:0: hogeout.mp4

### 長さのトリミング
15秒の位置から、10秒出力する。

    ffmpeg -i hogehoge.mp4 -ss 15 -t 10 -c copy hogeout.mp4


# 追記デイトナドラレコ用

デイトナのドラレコのデータに対しては、上記で連結できますが、youtubeにアップすることができませんでした。
正しくは、アップロードはできたものの、処理を拒まれるという状態でした。
これは、どうやから、コーデックの問題のようで、変換しながら連結するプログラムです。

    REM デイトナのドラレコ用
    @echo off
    echo %date% %time%
    dir /od *.mp4 /B > temptxt
    
    for /f %%a in (temptxt) do (
     
      rem 出力
      echo file '%%a'>>filelist.txt
     
    )
    
    ffmpeg -f concat -i filelist.txt -c:v copy -c:a aac output.mp4
    
    cd
    echo %date% %time%
    pause