GoPro HERO 6 で撮影した結果 4GB で分割されてしまった映像を繋げ Full HD H264 へエンコードする方法post

さてさて、超お久しぶりにブログを書いている sharkpp です。

半年以上更新が止まってしまいましたが、ぼちぼちと再開をさせたいなと思ってる次第...

とりあえず、今回は GoPro HERO 6 で撮影した結果 4GB で分割されてしまった映像を繋げ Full HD H264 へエンコードする方法を忘れないように残しておきたいと思います。

要約

分割された 4K 動画から、結合された Full HD 動画への変換(メタ情報を含む)は

  1. ls GX0[0-9]*.MP4 | while read L ; do echo file $L ; done > list.txt
  2. ffmpeg -y -f concat -i list.txt -bsf:v h264_mp4toannexb -vcodec libx264 -vf scale=1920:-1 -r 29.97 -map 0:v -map 0:a -map 0:d -copy_unknown GX0Y0000.MP4
  3. exiftool -tagsfromfile $(cat list.txt | cut -d " " -f 2 | tail -n 1) "-gps*" -unsafe GX0Y0000.MP4

このような感じでコマンドを打てば変換できそう。

はじめに

久しぶりに GoPro HERO 6 を引っ張り出してきて、よーし張り切って 4K 60fps で撮影しちゃうぞ!みたいなことをしちゃったわけです。

で、結果として...

$ ls -lh
total 52606864
-rwxrwxrwx@ 1 user  staff   3.7G 12 13 12:17 GX012316.MP4
-rwxrwxrwx  1 user  staff   3.7G 12 13 12:24 GX022316.MP4
-rwxrwxrwx  1 user  staff   3.7G 12 13 12:31 GX032316.MP4
-rwxrwxrwx  1 user  staff   3.7G 12 13 12:38 GX042316.MP4
-rwxrwxrwx  1 user  staff   3.7G 12 13 12:45 GX052316.MP4
-rwxrwxrwx  1 user  staff   3.7G 12 13 12:52 GX062316.MP4
-rwxrwxrwx  1 user  staff   1.0G 12 13 12:54 GX072316.MP4

約 4GB に分割されたファイルができるわけです。

そして、手元には空き容量と性能が乏しいPCがあり、とてもそのまま再生できる感じではない、さてこれをどうやって素材として使おうか、と...

目標

目指すべき目標をまず設定します。

項目元素材目標
ファイル最大約 4GB に分割された複数のファイル1 ファイル
コンテナMP4変更なし
映像H265 3840 x 2160 59.94 fpsH264 1920 x 1080 29.97 fps
音声AAC (LC) 48000 Hz, stereo, 128 kb/s変更なし

あとは、埋め込まれているメタ情報もなるべくそのままにしたい。

やり方

4 GB で分割されたファイルを単純に結合すると結合部分が無音になるという情報があったので色々試してみる。

とりあえず、空き容量も少ないので mp4box で2ファイルを結合してみる。

$ mp4box
-bash: mp4box: command not found

...の前に mp4box がないので Homebrew でインストール

$ brew install mp4box

で、改めて...

$ mp4box -add GX010000.MP4 -cat GX020000.MP4 -new GX0X0000.MP4
$ ffmpeg -y -i GX0X0000.MP4 -ab 192 GX0X0000.mp3

そして ffmpeg でも

$ echo file GX010000.MP4 >list.txt
$ echo file GX020000.MP4 >>list.txt
$ ffmpeg -f concat -i list.txt -c copy GX0Y0000.MP4
$ ffmpeg -y -i GX0Y0000.MP4 -ab 192 GX0Y0000.mp3

それぞれ結合した映像の音声部分を mp3 形式で抜き出し Audacity で波形を確認結果...

mp4box を使わず ffmpeg 単体でもとくに音声の途切れもなさそう、ということがわかった。

なので、

$ ls GX0[0-9]*.MP4 | while read L ; do echo file $L ; done > list.txt
$ ffmpeg -y -f concat -i list.txt -bsf:v h264_mp4toannexb -vcodec libx264 -vf scale=1920:-1 -r 29.97 \
         -map 0:v -map 0:a -map 0:d -copy_unknown GX0Y0000.MP4

||速度|45分の動画のエンコード時間| |60 fps|約 0.150 倍|約5時間| |30 fps|約 0.165 倍|約4時間30分|

あと、どうしてもGPSの情報がコピーできなかったので exiftool でコピーする

$ exiftool -tagsfromfile $(cat list.txt | cut -d " " -f 2 | tail -n 1) "-gps*" -unsafe GX0Y0000.MP4

蛇足として GoPro HERO7 で撮影した動画からGPS情報をgpxファイルとして抜き出す方法 – Bang's Tmp returned にて知りましたが、 GitHub - juanmcasillas/gopro2gpx: Parse the gpmd stream for GOPRO moov track (MP4) and extract the GPS info into a GPX (and kml) file. なるツールで GoPro で撮影した動画からGPS情報を抜き出すことができるようですね。

まとめ

  1. ls GX0[0-9]*.MP4 | while read L ; do echo file $L ; done > list.txt
  2. ffmpeg -y -f concat -i list.txt -bsf:v h264_mp4toannexb -vcodec libx264 -vf scale=1920:-1 -r 29.97 -map 0:v -map 0:a -map 0:d -copy_unknown GX0Y0000.MP4
  3. exiftool -tagsfromfile $(cat list.txt | cut -d " " -f 2 | tail -n 1) "-gps*" -unsafe GX0Y0000.MP4

この手順で、 分割された 4K 動画から Full HD 動画へ含まれるメタ情報も含めいい感じにエンコードすることができました。

参考


   /   変更履歴  /   Permalink  /  このエントリーをはてなブックマークに追加 
 カテゴリ: ブログ  /   タグ: macOS, ffmpeg, h265, hevc, h264, exiftool, GoPro