iPhoneで撮った動画とビデオカメラの動画を繋げる
今回の条件 (2022/10/06)
動画ファイル内訳
6.mov, 8.mov
9.mov
ビデオカメラで1080iで撮影・保存された元動画を1080p 59.94fps HEVCに変換したもの (多分)
「iPhone→ビデオカメラ」の順に繋げる
自分のPCで動画自体の再エンコはしない
数時間負荷かけつづけて電気使いたくない
例えば、AviUtlで全部繋げて出力し直すなどはしない
再エンコが必要な場合、OCIの無料枠のVMでffmpegをソフトウェアエンコードでゆっくり動かすくらい 保存用に容量をできるだけ削るなどは考えなくてもよい
ただでかすぎると扱いに困るので適度な感じで
音声と動画が正しく再生できさえすればあとはYouTubeが良い感じに再エンコしてくれるはず
使用ソフトバージョン
試したこと
普通に ffmpeg -f concat -i list.txt -c:v copy -c:a copy で結合
9.mov が始まった瞬間エラーでまくり、無限に時間が進む
中止して再生すると、 9.mov が始まるタイミングで動画・音声が止まり時間だけ進むようになる
ffmpeg -i concatf:list.txt -c:v copy -c:a copy
何故かリスト内の1つめの動画だけ出力して終わる
OCI上で全動画を1つずつx264な.mp4に再エンコしてから元PCで -f concat する code:sh
# OCI ARM Ampere A1 3core で速度 x0.5 くらい
ffmpeg -threads 0 -i 6.mov -r 59.94 -video_track_timescale 600 -vsync cfr -preset veryfast -crf 17 -b:a 192k o/6.mp4
接続の瞬間に1行だけログが出たけどちゃんと全部結合を終えてくれた
code:txt
再生すると、 9.mp4 開始以降音声だけおかしくなる
途切れたり遅くなったり
Audacityで結合前の動画ファイルを読み込んで音声だけ繋いで書き出して、↑で合成した動画の音声を置き換える code:sh
ffmpeg -i output.mp4 -i sound.m4a -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 output_.mp4
Audacityで両方のファイルみたときに、8.movは44100Hz、9.movは48000Hzなのに気づいた
音声がおかしかった原因これかもな
基本的にffmpeg -f concatは一番最初の動画とそれ以降の動画・音声のパラメータが同じものとして扱うので、44100Hzとして 9.mov を再生しようとしておかしくなっていた説がある 似た例として、結合前後の動画でiPhoneの画面の向きを変えていたときに一番最初の向きとして扱われたりする
9.mov の音声だけAudacityで44100Hzに再サンプリングして 9.mp4 の音声を置き換えてみた
8.mp4 9.mp4 だけなら問題はないが、全部繋げようとするとエラーになる
code:txt
...
DTS 196617403, next:52119019648 st:0 invalid dropping
PTS 196618363, next:52119019648 invalid dropping st:0
DTS 196617723, next:52119552981 st:0 invalid dropping
PTS 196618043, next:52119552981 invalid dropping st:0
Last message repeated 18 times