Я использую эту команду для deshake и стабилизирую видео:
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
(Я использую mkv с тех пор mp4 выходные результаты по этой ошибке: не Мог найти тег для кодека pcm_s16le в потоке № 1, кодек не в настоящее время поддерживаемый в контейнере),
Источник: https://www.epifocal.net/blog/video-stabilization-with-ffmpeg
Я использую ffmpeg2 (Смотрите, что видео Deshaking используют сценарий),
Выше двух строк стабилизируют размер видео. Как я могу уменьшить размер?
Я вижу два аспекта:
Мои видео метаданные:
===> 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 без сжатия. [ 1125]
Ваш ffmpeg
поддерживает кодировщик AAC libfdk_aac, который является лучшим кодером AAC, поддерживаемым в настоящее время ffmpeg
. Чтобы использовать его, замените -c:a copy
на -c:a libfdk_aac -vbr 5
.
В качестве альтернативы, вы можете использовать собственный кодер FFmpeg AAC. Чтобы использовать его, замените -c:a copy
на -c:a aac -b:a 128k
. Это не так хорошо, как libfdk_aac, но дайте ему больше битов, и это будет приемлемо.
Теперь вы можете использовать формат выходного контейнера MP4, если предпочитаете его над Matroska (MKV).
Для получения дополнительной информации об этих кодировщиках см. FFmpeg Wiki: AAC .
-crf
При использовании libx264 для кодирования видео H.264 опция -crf
является одним из способов управления скоростью для контроля качества. Значение ~ 18 или около того более или менее приведет к визуальному выводу без потерь, но в зависимости от содержимого, это также может привести к несколько большему файлу. Увеличение значения +6 обычно уменьшает размер выходного файла на 50%. Общая рекомендация состоит в том, чтобы использовать самое высокое значение -crf
, которое все еще обеспечивает приемлемое качество.
Если вы ориентируетесь на определенный размер выходного файла, например, из-за ограничений носителя, то вы должны кодировать в двухпроходном режиме . Однако, если конкретный целевой размер файла не имеет первостепенного значения, проще и быстрее просто использовать -crf
(я не использовал двухпроходный в годах).
Для получения дополнительной информации см. FFmpeg Wiki: H.264 .
При правильном использовании кодирование в H.265 / HEVC с libx26 5 может привести к уменьшению размера файла при том же воспринимаемом качестве. Компромисс - медлительность кодирования, и поддержка проигрывателя / устройства пока не так распространена, как H.264.
Я сам не очень часто использовал этот кодировщик, поэтому я не знаю, какие значения -crf
предложить, но стоит попробовать. Возможно, вам придется использовать -preset veryslow
, чтобы действительно выиграть у x264, если вы уже используете один из более медленных пресетов в x264.
См. FFmpeg Wiki: H.265 .
Если вы хотите уменьшить масштаб, может быть быстрее масштабировать сначала в обеих командах, а не масштабировать последним во второй команде. Вам придется экспериментировать, потому что я не знаком с vidstab *, или это узкое место, или нет.
-vf scale=-2:720,vidstab*...