HLS.js使用ガイドとベストプラクティス
HLS.jsの究極ガイド。動作原理、活用シーン、メリット・デメリットを深く解説し、コード例とよくある問題の解決策を提供します。
続きを読む →動画処理必須ツール、入門から精通までの完全コマンドマニュアル
FFmpegは強力なオープンソースの音声・動画処理ツールで、ほぼすべての一般的な音声・動画フォーマットの変換、編集、フィルターなどの操作に対応しています。libavcodec、libavformat、libavutilなどの複数のライブラリを含んでおり、現在最も人気のある動画処理ツールの1つです。
本稿では、日常業務で最もよく使われるFFmpegコマンドを整理し、フォーマット変換、音声抽出、動画カット、ウォーターマーク追加、字幕合成、動画圧縮などの高頻度シーンを網羅しています。すぐに参照して使用できるようになっています。
解像度、ビットレート、エンコードフォーマット、長さなど、動画の詳細情報を表示します:
ffmpeg -i input.mp4
重要な情報だけを表示し、余分な内容を出力しない:
ffmpeg -i input.mp4 -hide_banner
ffmpeg -version
ffmpeg -encoders
ffmpeg -decoders
ffmpeg -codecs
ffmpeg -formats
ffmpeg -filters
ffmpeg -i input.mp4 output.avi
ffmpeg -i input.mp4 output.mkv
ffmpeg -i input.mp4 -c:v libvpx -c:a libvorbis output.webm
ffmpeg -i input.mp4 -c copy output.mov
高速変換(再エンコードなし):
ffmpeg -i input.avi -c copy output.mp4
再エンコード(互換性向上):
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
現在のディレクトリ内のAVIファイルを一括でMP4に変換:
# Windows
for %i in (*.avi) do ffmpeg -i "%i" -c copy "%~ni.mp4"
# Linux/Mac
for f in *.avi; do ffmpeg -i "$f" -c copy "${f%.avi}.mp4"; done
対象フォーマットが同じエンコードに対応している場合、-c copyを使用するとストリームを直接コピーでき、非常に高速かつ品質が損なわれません:
ffmpeg -i input.mkv -c copy output.mp4
ffmpeg -i input.mp4 -vn -c:a libmp3lame output.mp3
音声品質を指定(0が最高、9が最低):
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
ffmpeg -i input.mp4 -vn -c:a aac -b:a 128k output.aac
ffmpeg -i input.mp4 -vn -c:a pcm_s16le output.wav
# MP3 → AAC
ffmpeg -i input.mp3 -c:a aac -b:a 128k output.aac
# WAV → MP3
ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3
# FLAC → MP3
ffmpeg -i input.flac -c:a libmp3lame -b:a 320k output.mp3
ffmpeg -i input.mp4 -vn -ss 00:01:00 -t 00:00:30 -c:a copy output.mp3
パラメータ説明:-ss 開始時間、-t 持続時間
10秒目から30秒間の動画を切り出し:
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
開始時間から終了時間まで切り出し:
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
-c copyを使用するとカット速度は速いですが正確でない場合があります。正確なカットが必要な場合は、-c copyを外して再エンコードしてください。
ffmpeg -i input.mp4 -ss 00:00:10.5 -t 00:00:30.2 -c:v libx264 -c:a aac output.mp4
方法1:concatデマルチプレクサを使用(ファイルリスト方式)
まずファイルリストfilelist.txtを作成:
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
次に結合:
ffmpeg -f concat -i filelist.txt -c copy output.mp4
方法2:concatフィルターを使用(再エンコード)
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
動画を10分ごとに分割:
ffmpeg -i input.mp4 -c copy -segment_time 00:10:00 -f segment output_%03d.mp4
# 1280x720に変換
ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
# 幅を1280に比例縮小、高さは自動計算
ffmpeg -i input.mp4 -vf "scale=1280:-1" -c:a copy output.mp4
# 高さを720に比例縮小、幅は自動計算
ffmpeg -i input.mp4 -vf "scale=-1:720" -c:a copy output.mp4
ffmpeg -i input.mp4 -b:v 2000k -b:a 128k output.mp4
CRF(Constant Rate Factor)はx264/x265エンコーダーの品質管理パラメータで、範囲は0-51、数値が小さいほど品質が高くなります。推奨範囲は18-28です:
# 高品質(ファイルサイズ大)
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -c:a copy output.mp4
# 中品質(推奨)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a copy output.mp4
# 低品質(ファイルサイズ小)
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -c:a copy output.mp4
ffmpeg -i input.mp4 -b:a 128k -c:v copy output.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset medium -c:a aac -b:a 96k output.mp4
パラメータ説明:-preset エンコード速度と圧縮率のバランス。ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslowから選択可能
ffmpeg -i input.mp4 -r 24 -c:a copy output.mp4
左上:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" -c:a copy output.mp4
右上:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:10" -c:a copy output.mp4
左下:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:H-h-10" -c:a copy output.mp4
右下:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" -c:a copy output.mp4
中央:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=(W-w)/2:(H-h)/2" -c:a copy output.mp4
ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]format=rgba,colorchannelmixer=aa=0.5[wm];[0:v][wm]overlay=10:10" -c:a copy output.mp4
パラメータ説明:aa=0.5 は透明度50%を意味します
ffmpeg -i input.mp4 -vf "drawtext=text='ツール検索サイト':fontsize=24:fontcolor=white:x=10:y=10" -c:a copy output.mp4
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=x='if(gte(t,2), -w+(t-2)*100, NAN)':y=10" -c:a copy output.mp4
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" -c:a copy output.mp4
ffmpeg -i input.mkv -map 0:s:0 subtitle.srt
ffmpeg -i subtitle.srt subtitle.ass
# 時計回りに90度回転
ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4
# 反時計回りに90度回転
ffmpeg -i input.mp4 -vf "transpose=2" -c:a copy output.mp4
# 180度回転
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "hflip" -c:a copy output.mp4
ffmpeg -i input.mp4 -vf "vflip" -c:a copy output.mp4
ffmpeg -i input.mp4 output.gif
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:03 -vf "fps=10,scale=480:-1" output.gif
# 毎秒1フレーム抽出
ffmpeg -i input.mp4 -r 1 frame_%04d.jpg
# 10秒ごとに1フレーム抽出
ffmpeg -i input.mp4 -r 0.1 frame_%04d.jpg
# すべてのフレームを抽出
ffmpeg -i input.mp4 frame_%04d.png
ffmpeg -framerate 24 -i frame_%04d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
ffmpeg -loop 1 -i image.jpg -t 5 -c:v libx264 -pix_fmt yuv420p output.mp4
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -hls_time 10 -hls_list_size 0 -f hls output.m3u8
ffmpeg -i input.mp4 \
-map 0 -map 0 -map 0 \
-b:v:0 800k -s:v:0 640x360 \
-b:v:1 1500k -s:v:1 854x480 \
-b:v:2 3000k -s:v:2 1280x720 \
-c:a aac -b:a 128k \
-var_stream_map "v:0,a:0 v:1,a:0 v:2,a:0" \
-master_pl_name master.m3u8 \
-hls_time 10 -hls_list_size 0 \
-f hls stream_%v/output.m3u8
ffmpeg -i input.mp4 \
-map 0 -map 0 \
-b:v:0 1500k -s:v:0 854x480 \
-b:v:1 3000k -s:v:1 1280x720 \
-b:a 128k \
-use_timeline 1 -use_template 1 \
-window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" \
-f dash output.mpd
ffmpeg -i input.mp4 -c copy -f flv rtmp://server/live/streamkey
NVIDIA GPUアクセラレーション(NVENC):
ffmpeg -i input.mp4 -c:v h264_nvenc -preset fast -cq 23 -c:a copy output.mp4
Intel QSVアクセラレーション:
ffmpeg -i input.mp4 -c:v h264_qsv -preset medium -c:a copy output.mp4
delogoフィルターを使用してウォーターマークを除去:
ffmpeg -i input.mp4 -vf "delogo=x=10:y=10:w=100:h=50" -c:a copy output.mp4
# 2倍速
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4
# 0.5倍速
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" output.mp4
ffmpeg -i input.mp4 -vf "reverse" -af "areverse" output.mp4
ffmpeg -i input.mp4 -vf "nlmeans" -c:a copy output.mp4
# ステップ1:動画を分析
ffmpeg -i input.mp4 -vf vidstabdetect -f null -
# ステップ2:安定化を適用
ffmpeg -i input.mp4 -vf vidstabtransform -c:a copy output.mp4
-progressパラメータを使用して進捗情報を出力:
ffmpeg -i input.mp4 -c copy output.mp4 -progress pipe:1
ffmpeg -y -i input.mp4 output.mp4
# 音声を除去
ffmpeg -i input.mp4 -an -c:v copy output.mp4
# 映像を除去
ffmpeg -i input.mp4 -vn -c:a copy output.mp3
| パラメータ | 説明 |
|---|---|
-i |
入力ファイルを指定 |
-c / -codec |
エンコーダーを指定 |
-c copy |
ストリームを直接コピー、再エンコードなし |
-c:v |
映像エンコーダーを指定 |
-c:a |
音声エンコーダーを指定 |
-b:v |
映像ビットレート |
-b:a |
音声ビットレート |
-s |
解像度、例:1280x720 |
-r |
フレームレート |
-ss |
開始時間 |
-t |
持続時間 |
-to |
終了時間 |
-vf |
映像フィルター |
-af |
音声フィルター |
-vn |
映像ストリームを除去 |
-an |
音声ストリームを除去 |
-y |
確認なしで出力ファイルを上書き |
-crf |
固定品質係数(x264/x265) |
-preset |
エンコード速度と圧縮率のバランス |
FFmpegは機能が非常に強力な音声・動画処理ツールであり、これらのよく使うコマンドをマスターすると動画処理の効率を大幅に向上させることができます。本稿では基本的なフォーマット変換から高級フィルターまで、大部分のよく使われるシーンを網羅しています。いざというときのためにブックマークしておくことをお勧めします。
コマンドを覚えたくない場合は、オンライン動画ツールを直接ご利用いただけます。動画変換、圧縮、M3U8→MP4変換などの多機能を備え、ソフトウェアのインストール不要でブラウザですべての操作が完了します。
その他の役立つ記事とツール
HLS.jsの究極ガイド。動作原理、活用シーン、メリット・デメリットを深く解説し、コード例とよくある問題の解決策を提供します。
続きを読む →ゼロからMPEG-DASHを学び、アダプティブビットレートストリーミングのコア技術をマスター。DASH vs HLS比較とプレーヤー使用方法を含みます。
続きを読む →M3U8セグメント動画をMP4ファイルに整理する一般的な処理手法を紹介。オンラインツール、プレーヤーでの検証方法、開発者向けソリューションを含みます。
続きを読む →