Quick Timer Playerの動画をffmpegで1/15以下まで圧縮
バージョン情報
- 手元の作業PC: Apple M1 Pro
- ffmpeg: 7.0.1
- ffprobe: 7.0.1
目的
ffmpegでファイルサイズ制限を気にせず、高速かつ明確な圧縮処理を行うこと。
QuickTime Playerの録画ファイルはサイズが大きくなりがちです。video smallerなどのクラウドサービスもありますが、ファイルサイズの制限があったり、圧縮アルゴリズムがブラックボックスです。ffmpegを使用すれば、ファイルサイズを気にせず、高速かつ指定方法で圧縮できます。
圧縮
QuickTime Playerで収録したinput.movを圧縮してoutput.mp4で出力する方法を説明します。
- オプションの解説
- -i input.mov: 入力ファイル(今回はinput.mov)を指定します。
- -c:v libx265: ビデオコーデックにH.265(HEVC)を使用します。H.265は高効率な圧縮を提供します。
- -c:a aac: オーディオコーデックにAACを使用します。AACは広く互換性のある高品質のオーディオコーデックです。
- -tag:v hvc1: ビデオストリームのタグを設定し、QuickTime Playerとの互換性を確保します。これにより、QuickTime PlayerがH.265コーデックを正しく認識できます。
ffmpeg -i input.mov -c:v libx265 -tag:v hvc1 -c:a aac output.mp4
ファイルサイズを比較すると、44M (input.mov) から 2.9M (output.mp4) へと圧縮され、約1/15 まで圧縮できました。
ちなみに、よくお世話になっている video smallerで圧縮したものは3.54M (output.mp4)で、約1/12の圧縮でした。
どちらのケースでも1/10以下まで圧縮されていて、非常に有効な圧縮手段です。
圧縮できる理由
今回のケースでは、以下の要因が組み合わさり、ファイルサイズが約1/15に圧縮されました。
1. ビットレートの大幅な削減
- input.mov: ビットレートが約10.7 Mbps
- output.mp4: ビットレートが約0.7 Mbps
ビットレートの大幅な削減により、ファイルサイズが大幅に小さくなります。
2. エンコーディングコーデックの違い
- input.mov: H.264コーデック
- output.mp4: H.265コーデック(HEVC)
H.265は、H.264に比べて同じ画質で約50%のビットレート削減が可能です。
3. Bフレームの数
- input.mov: Bフレームが16
- output.mp4: Bフレームが2
Bフレーム数が減少すると、エンコード効率が上がり、ファイルサイズが減少します。
4. タグの追加
-
input.mov: avc1
- Advanced Video Coding (H.264) の識別子。これは、ビデオストリームがH.264コーデックを使用してエンコードされていることを示します。
-
output.mp4: hvc1
- High Efficiency Video Coding (H.265/HEVC) の識別子。これは、ビデオストリームがH.265コーデックを使用してエンコードされていることを示します。
おまけ: ffprobeで各メディアストリームの属性の確認
- ビットレート
- フィールド名: bit_rate
- 例: bit_rate=708614(ビデオストリーム)または bit_rate=715046(フォーマット全体)
- エンコーディングコーデック
- codec_nameは略名。codec_long_nameは詳細名
- フィールド名: codec_name
- 例: codec_name=hevc
- フィールド名: codec_long_name
- 例: codec_long_name=H.265 / HEVC (High Efficiency Video Coding)
- Bフレームの数
- フィールド名: has_b_frames
- 例: has_b_frames=2
- タグ
- フィールド名: codec_tag_string
- 例: codec_tag_string=hvc1
input.movの解析結果
$ ffprobe -v error -show_format -show_streams input.mov
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=Main
codec_type=video
codec_tag_string=avc1
codec_tag=0x31637661
width=3020
height=1630
coded_width=3020
coded_height=1630
closed_captions=0
film_grain=0
has_b_frames=16
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuv420p
level=50
color_range=tv
color_space=bt709
color_transfer=bt709
color_primaries=bt709
chroma_location=center
field_order=progressive
refs=1
is_avc=true
nal_length_size=4
id=0x1
r_frame_rate=60/1
avg_frame_rate=6204000/103549
time_base=1/6000
start_pts=0
start_time=0.000000
duration_ts=206378
duration=34.396333
bit_rate=10675430
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=2068
nb_read_frames=N/A
nb_read_packets=N/A
extradata_size=32
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:non_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:creation_time=2023-12-30T05:46:56.000000Z
TAG:language=und
TAG:handler_name=Core Media Video
TAG:vendor_id=[0][0][0][0]
TAG:encoder=H.264
[/STREAM]
[FORMAT]
filename=input.mov
nb_streams=1
nb_programs=0
nb_stream_groups=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=34.396333
size=46088228
bit_rate=10719335
probe_score=100
TAG:major_brand=qt
TAG:minor_version=0
TAG:compatible_brands=qt
TAG:creation_time=2023-12-30T05:46:56.000000Z
[/FORMAT]
output.mp4の解析結果
$ ffprobe -v error -show_format -show_streams output.mp4
[STREAM]
index=0
codec_name=hevc
codec_long_name=H.265 / HEVC (High Efficiency Video Coding)
profile=Main
codec_type=video
codec_tag_string=hvc1
codec_tag=0x31637668
width=3020
height=1630
coded_width=3024
coded_height=1632
closed_captions=0
film_grain=0
has_b_frames=2
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuv420p
level=153
color_range=tv
color_space=bt709
color_transfer=bt709
color_primaries=bt709
chroma_location=center
field_order=progressive
refs=1
id=0x1
r_frame_rate=60/1
avg_frame_rate=60/1
time_base=1/15360
start_pts=0
start_time=0.000000
duration_ts=528384
duration=34.400000
bit_rate=708614
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=2064
nb_read_frames=N/A
nb_read_packets=N/A
extradata_size=2461
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:non_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:language=und
TAG:handler_name=Core Media Video
TAG:vendor_id=[0][0][0][0]
TAG:encoder=Lavc61.3.100 libx265
[/STREAM]
[FORMAT]
filename=output.mp4
nb_streams=1
nb_programs=0
nb_stream_groups=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=34.400000
size=3074700
bit_rate=715046
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2mp41
TAG:encoder=Lavf61.1.100
[/FORMAT]
終わりに
QuickTime Playerで録画した動画のファイルサイズをffmpegを使用して効率的に圧縮する方法を紹介しました。H.265コーデックを利用し、ビットレートやBフレームの調整、適切なタグ付けにより、ファイルサイズを大幅に減少させることができました。これにより、高品質を保ちながらストレージスペースの節約が可能です。ぜひ、実際の作業で試してみてください。ffmpegの多機能性を活用すれば、他にもさまざまな動画処理が行えます。
Discussion