インフラエンジニアのPC環境

インフラエンジニアは常に効率環境を目指している

ユーザ用ツール

サイト用ツール


サイドバー

目次

ホーム

OS


CUIソフト

今はほぼ未使用

操作を覚える必要のあるおすすめソフト

Action disabled: source
software:movie-edit:ffmpeg.html


動画編集ソフトの比較・おすすめ

マルチプラットフォームで超高機能ffmpegコマンドで動画編集

まとめ


メモ

2014年現在、主流はコンテナはmp4、圧縮コーデックはH.264である。現状では最も互換性の高い形式で、現在の主なOSで再生可能である。ffmpegでもmp4を出力動画の拡張子に指定した場合、デフォルトのコーデックとしてH.264が選択される。

ffmpegの使い方


実行確認

windowsでの実行確認

c:\>ffmpeg.exe
ffmpeg version git-2019-12-19-99f505d Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20191125
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 36.101 / 56. 36.101
  libavcodec     58. 65.100 / 58. 65.100
  libavformat    58. 35.101 / 58. 35.101
  libavdevice    58.  9.101 / 58.  9.101
  libavfilter     7. 69.101 /  7. 69.101
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'
c:\>ffmpeg.exe -h


結合

1秒で、無劣化結合

> more 30.txt
file 30_1.mp4
file 30_2.mp4


> ffmpeg.exe -f concat -i 30.txt -c copy  30_output.mp4
または
> ffmpeg.exe -f concat -i 30.txt   -c:v copy -c:a copy -map 0:v -map 0:a   30_output.mp4


-c:v copy -c:a copy -map 0:v -map 0:a

-c:v copy ビデオコーデックをコピーする(無劣化)
-c:a copy オーディオコーデックをコピーする(無劣化)
-map 0:v ビデオファイルが複数存在する場合は全てのものを同梱する
-map 0:a オーディオファイルが複数存在する場合は、全てのものを同梱する

画像変換しつつ他結合

2ファイル
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "concat=n=2:v=1:a=1" output.mp4

3ファイル
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -filter_complex "concat=n=3:v=1:a=1" output.mp4

nは結合する動画ファイル数
vは映像を結合するかどうか(1が結合する)
aはオーディオを結合するかどうか(1が結合する)


変換

aviをmp4に変換

ffmpeg -i exapmle.avi -vcodec libx264 exapmle.mp4

MTSから.mp4に変換する方法

ビデオカメラの.MTS形式から、一般的なmp4に変換する方法

# サイズは小さいが、画像は悪い。
ffmpeg -i FROM.MTS -b:v 8000k -strict experimental -threads 0 OUT.mp4

#なるべく劣化させない方法(元のサイズよりも大きいサイズになる)
ffmpeg -i input.mts -vcodec libx264 -ar 48000 -ab 128k -r 30000/1001 -vsync 1 -deinterlace -f mp4 -bufsize 20000k -maxrate 25000k output.mp4

.MOVから.mp4に変換する方法

MacのquickTime Player独自形式の.MOVから、mp4に変換する方法です。

ffmpeg -i [INPUT_FILE].MOV -pix_fmt yuv420p [OUTPUT_FILE].mp4
ffmpeg -i sample_movie.MOV -pix_fmt yuv420p sample_movie.mp4

mp4をwebmに変換

ffmpeg -i input.mp4  output.webm
ffmpeg -i input.mp4 -strict -2 output.webm

MP4 to MP3

ffmpeg -i [INPUT_FILE].mp4 -ab 128 [OUTPUT_FILE].mp3

WAV to MP3

ffmpeg -i "input.wav" -vn -ac 2 -ar 44100 -ab 256k -acodec libmp3lame -f mp3 "output.mp3"

MP3と画像をMP4に変換

#Twitter投稿用
ffmpeg -loop 1 -r 30000/1001 -i twitter.png -i "test.mp3" -vcodec libx264 -acodec aac -strict experimental -ab 320k -ac 2 -ar 48000 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -shortest twitter.mp4

ffmpeg -loop 1 -i image.jpg -i input.mp3 -c:v copy -c:a copy -shortest output.mp4 <- このやり方だと、ファイルサイズがすごく大きくなった。

「-loop 1」で静止画image.jpgを全フレーム反復して映像の代わりとする。
「-shortest」で入力コンテンツのうち短い長さに合わせる(今回はmp3の長さ分のmp4を作る)。
「-c:v copy」で映像は入力のまま
「-c:a copy」で音声も入力のまま。

「-r 30000/1001」 フレームレートを指定します。29.97fpsにしています
「-vcodec libx264」 動画フォーマットを指定します。H.264にしています
「-acodec aac -strict experimental -ab 320k -ac 2 -ar 48000」 音声フォーマットを指定。AACで320kbps、2チャンネル、サンプリングレート48kHzとしています
「-pix_fmt yuv420p」 出力動画の画素フォーマットを指定します
「-shortest」 動画の長さを入力ソースが最短のもの(ここでは音声ファイル)に合わせます
「-vf “scale=trunc(iw/2)*2:trunc(ih/2)*2”」 ピクセル数を2の倍数に変換


分割

ffmpeg -ss 1:04:20 -i input.mp4 -ss 0 -t 0:33:25 -c:v copy -c:a copy -async 1 -strict -2 part1.mp4;
ffmpeg -ss 1:46:14 -i input.mp4 -ss 0 -t 0:35:08 -c:v copy -c:a copy -async 1 -strict -2 part2.mp4;
ffmpeg -ss 2:39:17 -i input.mp4 -ss 0 -t 0:33:02 -c:v copy -c:a copy -async 1 -strict -2 part3.mp4;
ffmpeg -ss 3:20:02 -i input.mp4 -ss 0 -t 0:51:18 -c:v copy -c:a copy -async 1 -strict -2 part4.mp4;
-ss {開始時間} 切り出しの開始時間を指定。-iより前に置くのがポイントらしいです
-i input.mp4 元ファイル
-ss 0 おまじないみたいな指定方法
-t {切り出す秒数} ここは切り出しの終了時間ではなく、-ssで指定した開始時間からの経過時間です
-c:v copy ビデオコーデックをコピーする(無劣化)
-c:a copy オーディオコーデックをコピーする(無劣化)
-async 1 音声の同期方法。最初だけ同期して後続のサンプルはそのままといういみ
-strict -2 バージョンによってexperimental(実験的実装)を許可する必要があるので一応付けとく

先頭をカット

指定時間までカットし、最後まで出力する
ffmpeg -ss [duration] -i input.mp4 -c copy output.mp4

#1秒後から最後まで
ffmpeg -i input.mp4 -ss 1  output.mp4

#0.5秒後から最後まで
ffmpeg -i input.mp4 -ss 0.5  output.mp4


#正確にカット (正確な時間は動画変数ソフトで確認できます。)
ffmpeg.exe -i 29-00.00.29.480-00.00.34.663.mp4 -ss 00:00:00.480 tmp3.mp4

終わりをカット

開始0秒から指定時間を出力する

#最後の1秒をカット
ffmpeg -i input.mp4 -t 1  output.mp4

#正確にカット (正確な時間は動画変数ソフトで確認できます。)
ffmpeg.exe -i  tmp.mp4 -t 00:00:01.859 tmp2.mp4

前後をカット

指定時間までカットし、指定した再生時間まで出力する。
ffmpeg -ss [duration] -to [hh:mm:ss] -i input.mp4 -c copy output.mp4

ffmpeg -ss 01:03 -to 2:23 -i vol_1.mp3 -c copy output.mp3

#エンコードあり(時間かかる)
ffmpeg -i input.mp4 -ss 300 -t 60 output.mp4
input.mp4の5分(300秒)地点から1分間(60秒)の動画を切り出すことができます。
02:12 から、4秒
ffmpeg -ss 00:02:12 -i "input.mp4" -ss 0 -t 4  1.mp4
input.mp4 の 1分38秒 時点から 46秒間 切り取り、output.mp4 として出力(無劣化)
ffmpeg -ss 00:01:38 -i input.mp4 -ss 0 -t 00:00:46 -c:v copy -c:a copy -async 1 output.mp4

-ss 開始時刻までシーク
-i 元ファイル
-ss 0 切り取り開始(==開始時刻)
-t 切り取る秒数(開始時刻との差分)
-c:v copy 映像無変換(無劣化)
-c:a copy 音声無変換(無劣化)
-async 1 音声同期を最初だけにして、後続のサンプルはそのまま
#エンコードなし(時間短縮)
ffmpeg -i input.mp4 -ss 4500 -t 60 -vcodec copy -acodec copy 1a.mp4


音量を調整する

音量レベルを確認

ffmpeg -i input.mp4 -vn -af volumedetect -f null -

音量変換

確認して、max_volume が 0dB くらいになるように合わせる。

ffmpeg -i input -af volume=10dB output

相対倍率で音量変換

ffmpeg -i inp.mp4 -vcodec copy -af volume=2 out.mp4

相対倍率(0.5とか1.5とか2とか4とか言った値)
volume=2 2倍にする


TIPS

動画の表示部分のカット

640 x 360 の動画で、下をカットする方法

ffmpeg -i "test.mp4" -vf crop=640:250:0:0 outtest.mp4

再生速度変更

2倍速の場合
ffmpeg -i src.mp4 -vf setpts=PTS/2.0 -af atempo=2.0 dest.mp4

1.2倍速の場合
ffmpeg -i src.mp4 -vf setpts=PTS/1.2 -af atempo=1.2 dest.mp4

0.8倍速の場合
ffmpeg -i src.mp4 -vf setpts=PTS/0.8 -af atempo=0.8 dest.mp4
ffmpeg -i [ファイル名] -af atempo=2.0 [アウトプットファイル名]


参考


software/movie-edit/ffmpeg.html.txt · 最終更新: 2023/12/29 01:56 by kurihara

ページ用ツール