SONYのハンディカムで動画を録画すると、拡張子がMTS形式の動画ファイルが生成されます。
通常の利用ではmp4形式のほうがコンパクトで扱いやすいので、ffmpegを利用して動画を変換してみました。
リンク
リンク
ffpmegの導入(macOSの場合)と動画の情報
$ brew install ffmpeg
$ ls -lh ./IMG_20220123_095830.MTS
-rwx------ 1 user staff 23M Jan 23 11:48 ./IMG_20220123_095830.MTS
$ ffprobe ./IMG_20220123_095830.MTS
ffprobe version 4.4 Copyright (c) 2007-2021 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.29)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, mpegts, from './IMG_20220123_095830.MTS':
Duration: 00:00:15.52, start: 1.033367, bitrate: 12465 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p(top first), 1440x1080 [SAR 4:3 DAR 16:9], 29.97 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
Stream #0:2[0x1200]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090), 1920x1080
動画の変換 (書式: ffmpeg -i 入力ファイル 出力ファイル)
$ ffmpeg -i ./IMG_20220123_095830.MTS ./IMG_20220123_095830.mp4
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.29)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, mpegts, from './IMG_20220123_095830.MTS':
Duration: 00:00:15.52, start: 1.033367, bitrate: 12465 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p(top first), 1440x1080 [SAR 4:3 DAR 16:9], 29.97 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
Stream #0:2[0x1200]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090), 1920x1080
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (ac3 (native) -> aac (native))
Press [q] to stop, [?] for help
[aac @ 0x7ffdc201c200] Using a PCE to encode channel layout "5.1(side)"
[libx264 @ 0x7ffdf2845e00] using SAR=4/3
[libx264 @ 0x7ffdf2845e00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x7ffdf2845e00] profile High, level 4.0, 4:2:0, 8-bit
[libx264 @ 0x7ffdf2845e00] 264 - core 161 r3049 55d517b - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to './IMG_20220123_095830.mp4':
Metadata:
encoder : Lavf58.76.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(top coded first (swapped)), 1440x1080 [SAR 4:3 DAR 16:9], q=2-31, 29.97 fps, 30k tbn
Metadata:
encoder : Lavc58.134.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1(side), fltp, 394 kb/s
Metadata:
encoder : Lavc58.134.100 aac
frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= frame= 48 fps=0.0 q=0.0 size= 0kB time=00:00:01.04 bitrate= 0.4kbits/sframe= 66 fps= 62 q=29.0 size= 256kB time=00:00:01.49 bitrate=1404.6kbits/frame= 84 fps= 51 q=29.0 size= 768kB time=00:00:02.11 bitrate=2979.1kbits/frame= 102 fps= 45 q=29.0 size= 1024kB time=00:00:02.68 bitrate=3120.9kbits/frame= 121 fps= 44 q=29.0 size= 1536kB time=00:00:03.32 bitrate=3781.0kbits/frame= 136 fps= 40 q=29.0 size= 1792kB time=00:00:03.84 bitrate=3823.0kbits/frame= 148 fps= 38 q=29.0 size= 2304kB time=00:00:04.24 bitrate=4446.0kbits/frame= 160 fps= 36 q=29.0 size= 2816kB time=00:00:04.62 bitrate=4983.2kbits/frame= 172 fps= 34 q=29.0 size= 3328kB time=00:00:05.05 bitrate=5392.3kbits/frame= 187 fps= 34 q=29.0 size= 3840kB time=00:00:05.52 bitrate=5693.4kbits/frame= 199 fps= 33 q=26.0 size= 4352kB time=00:00:05.95 bitrate=5989.9kbits/frame= 212 fps= 32 q=29.0 size= 5120kB time=00:00:06.40 bitrate=6553.7kbits/frame= 227 fps= 31 q=29.0 size= 5632kB time=00:00:06.86 bitrate=6716.5kbits/frame= 238 fps= 30 q=29.0 size= 5888kB time=00:00:07.23 bitrate=6669.6kbits/frame= 249 fps= 30 q=29.0 size= 6400kB time=00:00:07.63 bitrate=6864.9kbits/frame= 264 fps= 30 q=29.0 size= 6912kB time=00:00:08.12 bitrate=6966.5kbits/frame= 276 fps= 29 q=29.0 size= 7168kB time=00:00:08.51 bitrate=6898.6kbits/frame= 294 fps= 29 q=29.0 size= 7936kB time=00:00:09.10 bitrate=7136.9kbits/frame= 306 fps= 28 q=29.0 size= 8448kB time=00:00:09.49 bitrate=7290.0kbits/frame= 322 fps= 28 q=29.0 size= 9216kB time=00:00:10.04 bitrate=7513.7kbits/frame= 336 fps= 28 q=29.0 size= 9728kB time=00:00:10.51 bitrate=7577.2kbits/frame= 349 fps= 28 q=29.0 size= 10240kB time=00:00:10.94 bitrate=7665.1kbits/frame= 366 fps= 28 q=29.0 size= 10752kB time=00:00:11.52 bitrate=7645.9kbits/frame= 381 fps= 28 q=29.0 size= 11264kB time=00:00:12.03 bitrate=7669.1kbits/frame= 396 fps= 28 q=29.0 size= 11776kB time=00:00:12.50 bitrate=7716.7kbits/frame= 407 fps= 28 q=29.0 size= 12288kB time=00:00:12.88 bitrate=7812.3kbits/frame= 419 fps= 28 q=29.0 size= 12800kB time=00:00:13.24 bitrate=7915.0kbits/frame= 432 fps= 28 q=29.0 size= 13312kB time=00:00:13.71 bitrate=7950.0kbits/frame= 446 fps= 28 q=29.0 size= 13824kB time=00:00:14.20 bitrate=7970.6kbits/frame= 457 fps= 28 q=29.0 size= 14336kB time=00:00:14.54 bitrate=8071.9kbits/frame= 465 fps= 25 q=-1.0 Lsize= 17084kB time=00:00:15.50 bitrate=9023.8kbits/s speed=0.826x
video:16317kB audio:749kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.104848%
[libx264 @ 0x7ffdf2845e00] frame I:7 Avg QP:24.13 size: 96276
[libx264 @ 0x7ffdf2845e00] frame P:138 Avg QP:26.39 size: 61031
[libx264 @ 0x7ffdf2845e00] frame B:320 Avg QP:27.54 size: 23786
[libx264 @ 0x7ffdf2845e00] consecutive B-frames: 4.1% 9.0% 10.3% 76.6%
[libx264 @ 0x7ffdf2845e00] mb I I16..4: 15.7% 54.8% 29.5%
[libx264 @ 0x7ffdf2845e00] mb P I16..4: 5.8% 16.1% 7.0% P16..4: 38.0% 15.3% 8.4% 0.0% 0.0% skip: 9.5%
[libx264 @ 0x7ffdf2845e00] mb B I16..4: 0.8% 0.8% 0.5% B16..8: 42.2% 8.8% 2.5% direct: 7.5% skip:37.0% L0:42.5% L1:45.9% BI:11.7%
[libx264 @ 0x7ffdf2845e00] 8x8 transform intra:53.7% inter:76.1%
[libx264 @ 0x7ffdf2845e00] coded y,uvDC,uvAC intra: 67.8% 33.9% 3.4% inter: 31.4% 13.0% 0.4%
[libx264 @ 0x7ffdf2845e00] i16 v,h,dc,p: 4% 72% 4% 21%
[libx264 @ 0x7ffdf2845e00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 35% 24% 3% 3% 3% 5% 3% 7%
[libx264 @ 0x7ffdf2845e00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 5% 80% 7% 1% 1% 1% 2% 1% 2%
[libx264 @ 0x7ffdf2845e00] i8c dc,h,v,p: 66% 21% 11% 2%
[libx264 @ 0x7ffdf2845e00] Weighted P-Frames: Y:18.1% UV:10.9%
[libx264 @ 0x7ffdf2845e00] ref P L0: 57.2% 19.9% 15.9% 6.2% 0.8%
[libx264 @ 0x7ffdf2845e00] ref B L0: 90.1% 8.6% 1.3%
[libx264 @ 0x7ffdf2845e00] ref B L1: 97.2% 2.8%
[libx264 @ 0x7ffdf2845e00] kb/s:8614.77
[aac @ 0x7ffdc201c200] Qavg: 186.215
生成されたファイルのサイズと情報
$ ls -lh ./IMG_20220123_095830.*
-rwx------ 1 user staff 23M Jan 23 11:48 ./IMG_20220123_095830.MTS
-rwx------ 1 user staff 17M Jan 23 14:18 ./IMG_20220123_095830.mp4
$ $ ffprobe ./IMG_20220123_095830.mp4
ffprobe version 4.4 Copyright (c) 2007-2021 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.29)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './IMG_20220123_095830.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.76.100
Duration: 00:00:15.52, start: 0.000000, bitrate: 9017 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 8615 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 6 channels, fltp, 395 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
細かいチューニング無しで、ファイルサイズが73%に圧縮できました。
M1 macを利用しているので、変換時のfpsは29程度と、録画時間とほぼ同じ時間でエンコードできました。
動画のサイズやコーデックを指定することで更に圧縮できます。
動画の変換:サイズ指定(書式: ffmpeg -i 入力ファイル -vf scale=1280:-1 出力ファイル) 1280の場合
$ ffmpeg -i ./IMG_20220123_102735.MTS -vf scale=1024:-1 -pix_fmt yuv420p ./IMG_20220123_102735.1024.mp4
$ ls -lh ./IMG_20220123_102735.*
-rwx------ 1 user staff 15M Jan 23 14:42 ./IMG_20220123_102735.1024.mp4 → 34%
-rwx------ 1 user staff 28M Jan 23 2022 ./IMG_20220123_102735.1280.mp4 → 63%
-rwx------@ 1 user staff 39M Jan 23 14:27 ./IMG_20220123_102735.1920.mp4 → 88%
-rwx------@ 1 user staff 44M Jan 23 11:48 ./IMG_20220123_102735.MTS → 100%
この例では 1920 / 1280/ 1024 の3サイズに変更しましたが、少し確認する用途には 1024で十分でした。
超重要! おまけ:QuickTimeで再生できるmp4形式にするには
上記の方法で動画の変換を行ったのですが、なんとQuickTimeで再生できないではありませんか。。。(泣)
たぶんQuickTimeのaudio codecの判定が厳しいのだと思います。
QuickTimeで再生できるようにするオプションは、以下のとおりです。
(audio track(ac3)をコピーすることで無事解決しました)
方法1 h264の場合
$ ffmpeg -i ./input.MTS -vcodec h264 -c:a copy output.h264.acopy.mp4
方法2 yuv420pの場合
$ ffmpeg -i ./input.MTS -pix_fmt yuv420p -c:a copy output.yuv420p.acopy.mp4
アレンジ 方法2でサイズを変える場合(scaleオプションで縦768にする)
$ ffmpeg -i ./INPUT.MTS -ss 100 -vf scale=768:-1 -pix_fmt yuv420p -c:a copy OUT.yuv420p.acopy.mp4
上記の検証は macOS Big Sur 11.5.2 にて行いました。