Как уменьшить размер видео?

Введение

Я использую эту команду для 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 используют сценарий),

Как уменьшить размер видео?

Выше двух строк стабилизируют размер видео. Как я могу уменьшить размер?

Я вижу два аспекта:

  • аудио
  • разрешение. Если я понимаю следующий вывод, разрешение в данный момент 1920x1080. Я думаю, что 720 пунктов были бы достаточно.

Мои видео метаданные:

===> 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
0
задан 13 April 2017 в 05:24

1 ответ

У вас есть несколько способов уменьшить размер выходного файла:

Кодировать аудио

Как вы упоминали, вы можете кодировать аудио вместо потокового копирования здоровенного, без потерь формата PCM без сжатия. [ 1125]

Использование libfdk_aac

Ваш ffmpeg поддерживает кодировщик AAC libfdk_aac, который является лучшим кодером AAC, поддерживаемым в настоящее время ffmpeg. Чтобы использовать его, замените -c:a copy на -c:a libfdk_aac -vbr 5.

Использование собственного кодера FFmpeg AAC

В качестве альтернативы, вы можете использовать собственный кодер 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*...
1
ответ дан 3 November 2019 в 16:48

Другие вопросы по тегам:

Похожие вопросы: