私はこのコマンドを使用して、ビデオをシェイクして安定させます。
ffmpeg2 -i SHAKY_INPUT_VIDEO.mp4 -vf \
vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform_vectors.trf \
-f null -
ffmpeg2 -i SHAKY_INPUT_VIDEO.mp4 -vf \
vidstabtransform=input=transform_vectors.trf:zoom=1:smoothing=30,unsharp=5:5:0.8:3:3:0.4 \
-vcodec libx264 -preset slow -tune film -crf 18 -acodec copy SMOOTH_OUTPUT_VIDEO.mkv
(mp4出力でこのエラーが発生するため、mkvを使用します:ストリーム#1でコーデックpcm_s16leのタグが見つかりませんでした。コーデックは現在コンテナーでサポートされていません)
ソース: https://www.epifocal.net/blog/video-stabilization-with-ffmpeg
私はffmpeg2を使用しています( スクリプトを使用してビデオを揺さぶる を参照)
2本の線より上では、ビデオサイズが安定します。サイズを小さくするにはどうすればよいですか?
私には2つの側面があります。
私のビデオメタデータ:
===> ffprobe2 20170217_114248.MOV
ffprobe version git-2017-02-19-3206ea4 Copyright (c) 2007-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --disable-ffserver --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab --enable-libtheora --enable-libwavpack --enable-libopenjpeg --enable-libgsm --enable-nvenc
libavutil 55. 47.100 / 55. 47.100
libavcodec 57. 80.101 / 57. 80.101
libavformat 57. 66.102 / 57. 66.102
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 73.100 / 6. 73.100
libavresample 3. 2. 0 / 3. 2. 0
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20170217_114248-Felix-Jáchymovská.MOV':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2017-02-17T10:39:32.000000Z
Duration: 00:03:15.00, start: 0.000000, bitrate: 23478 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 22060 kb/s, 60 fps, 60 tbr, 60k tbn, 120k tbc (default)
Metadata:
creation_time : 2017-02-17T10:39:32.000000Z
handler_name : iCatch Alias Data Handler
encoder : iCatch AVCC
Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 44100 Hz, 2 channels, s16, 1411 kb/s (default)
Metadata:
creation_time : 2017-02-17T10:39:32.000000Z
handler_name : iCat Alias Data Handler
出力ファイルのサイズを小さくするには、いくつかの方法があります。
あなたが述べたように、高額でロスレスの非圧縮PCM形式をストリームコピーする代わりに、オーディオをエンコードできます。
ffmpeg
は、AACエンコーダーlibfdk_aacをサポートしています。これは、現在ffmpeg
でサポートされている最高のAACエンコーダーです。これを使用するには、-c:a copy
を-c:a libfdk_aac -vbr 5
に置き換えます。
または、ネイティブのFFmpeg AACエンコーダーを使用することもできます。これを使用するには、-c:a copy
を-c:a aac -b:a 128k
に置き換えます。これはlibfdk_aacほど良くありませんが、より多くのビットを与えることで許容できます。
これで、Matroska(MKV)よりもMP4出力コンテナー形式を使用できます。
これらのエンコーダーの両方の詳細については、 FFmpeg Wiki:AAC を参照してください。
-crf
値を使用してくださいLibx264を使用してH.264ビデオをエンコードする場合、-crf
オプションは品質を制御するレート制御の1つの方法です。 〜18程度の値では、多かれ少なかれ視覚的にロスのない出力が得られますが、コンテンツによっては、ファイルが多少大きくなることもあります。 +6の値を大きくすると、通常、出力ファイルのサイズが50%小さくなります。 一般的な推奨事項は、許容できる品質を提供する最高の-crf
値を使用することです。
ストレージメディアの制約などにより、特定の出力ファイルサイズを対象とする場合は、 2パスモードを使用してエンコード する必要があります。ただし、特定のターゲットファイルサイズが最も重要でない限り、-crf
を使用する方が簡単かつ高速です(私は何年も2パスを使用していません)。
詳細は FFmpeg Wiki:H.264 を参照してください。
Libx265を使用してH.265/HEVCに適切にエンコードすると、同じ認識品質でファイルサイズが小さくなる可能性があります。トレードオフはエンコーディングの速度低下であり、プレーヤー/デバイスのサポートはH.264ほど普及していません。
私はこのエンコーダをあまり使用していなかったため、どの-crf
値を提案すればよいかわかりませんが、試してみる価値はあります。 x264で低速のプリセットのいずれかを既に使用している場合は、-preset veryslow
を使用してx264よりも実際のパフォーマンスを向上させる必要がある場合があります。
FFmpeg Wiki:H.265 を参照してください。
2番目のコマンドで最後にスケーリングするのではなく、両方のコマンドで最初にスケーリングする方が高速になる場合があります。私はvidstab *に慣れていないか、それがボトルネックかどうかを実験する必要があります。
-vf scale=-2:720,vidstab*...