Я попытался преобразовать видеофайл в нужный формат, используя FFmpeg через WinFF. У меня есть конкретные требования к некоторым аспектам выходного файла, в то время как другие аспекты должны быть установлены таким образом, чтобы обеспечить наилучшее качество на выходе. Чтобы уточнить - я хочу, чтобы мой выходной файл был:

  • 1600 × 900
  • в контейнере мкв
  • с использованием видео декодера H.264
  • используя аудио декодер aac
  • Соотношение 16:9 (очевидно ...)
  • тот же уровень звука, что и на входе
  • 60 кадров в секунду
  • с ничего не вырезано или изображение теряет свою первоначальную пропорцию.

Не обязательно

  • используя все 48 аудио каналов.

Любой другой аспект файла, который не повлияет на перечисленные выше, должен обеспечить наилучшее качество. Ну, не буквально. Я не хочу файл, который занял бы половину моего жесткого диска, или это заняло бы неделю, чтобы преобразовать.

Во всяком случае, это была некоторая предыстория того, чем я сейчас занимаюсь. Я пытался все выяснить сам, но то, что я сделал, дало мне пустой файл .mkv вместе с журналом и 234,5 МБ .log. [Что-то] файл. Более того - преобразование заняло слишком много времени. Я конвертировал Big Buck Bunny длиной 10 минут, и это заняло что-то между 1-2 часами (вероятно). Я собираюсь конвертировать некоторые файлы продолжительностью 2 часа, так что да, один день на файл будет слишком много ...

Здесь идут параметры, которые я использовал.

1-й проход:

avconv -threads 8  -i bbb_sunflower_native_60fps_normal.mp4 \
-acodec aac -vcodec h264 -b:v 50000k  -r:v 60  -filter:v yadif,scale=1600:900 \
-aspect 16:9 -b:a 320k  -r:a 96000  -ac 48 -vol 256  -f null -an \
-passlogfile "/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.log" \
-pass 1  -y /dev/null

2-й проход

avconv -threads 8  -y -i bbb_sunflower_native_60fps_normal.mp4 -acodec aac \
-vcodec h264 -b:v 50000k  -r:v 60  -filter:v yadif,scale=1600:900 -aspect 16:9 \
-b:a 320k  -r:a 96000  -ac 48 -vol 256 \
-passlogfile "/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.log" -pass 2 \
"/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.mkv"

Я знаю, значения вроде 50000k и 96000 кажутся сумасшедшими, но я просто хотел попробовать это.

Наконец то, что я ищу!

  1. Что я сделал неправильно в первый раз?
  2. Какие параметры дадут мне желаемый результат?

Если кто-то будет очень приятным, я буду очень признателен за два набора параметров - один для лучшего, но не безумного вывода, и один для наилучшего, который я мог бы получить. Я знаю, что последний может сжечь мой процессор, потратить год на обработку или быть в 10 раз больше, чем весь мой диск. Это просто для моего любопытства.

РЕДАКТИРОВАТЬ Здесь идет вывод терминала с 1-го прохода. На самом деле теперь я вспомнил, что 2-го прохода не произошло. Я не могу восстановить то, что было в терминале, когда вещи разбились при переходе на второй проход. Я просто нажал ввод и весь терминал исчез. Я не могу дождаться завершения первого прохода прямо сейчас, это занимает слишком много времени.

Терминальный выход:

avconv version 9.16-6:9.16-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
built on Aug 10 2014 18:16:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
/home/wnerw/Pobrane/bbb_sunflower_native_60fps_normal.mp4':
Metadata:
major_brand     : isom
minor_version   : 1
compatible_brands: isomavc1
creation_time   : 2013-12-24 11:10:47
title           : Big Buck Bunny, Sunflower version
artist          : Blender Foundation 2008, Janus Bager Kristensen 2013
comment         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre           : Animation
composer        : Sacha Goedegebure
Duration: 00:10:34.56, start: 0.000000, bitrate: 10487 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 4000x2250 [PAR 1:1 DAR 16:9], 10002 kb/s,
60 fps, 60 tbr, 60k tbn, 120 tbc
Metadata:
  creation_time   : 2013-12-24 11:10:47
Stream #0.1(und): Audio: mp3, 48000 Hz, stereo, s16p, 160 kb/s
Metadata:
  creation_time   : 2013-12-24 11:10:49
Stream #0.2(und): Audio: ac3, 48000 Hz, 5.1, fltp, 320 kb/s
Metadata:
  creation_time   : 2013-12-24 11:10:49
[libx264 @ 0x16a36e0] using SAR=1/1
[libx264 @ 0x16a36e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x16a36e0] profile Main, level 5.0
Output #0, null, to '/dev/null':
Metadata:
major_brand     : isom
minor_version   : 1
compatible_brands: isomavc1
creation_time   : 2013-12-24 11:10:47
title           : Big Buck Bunny, Sunflower version
artist          : Blender Foundation 2008, Janus Bager Kristensen 2013
comment         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre           : Animation
composer        : Sacha Goedegebure
encoder         : Lavf54.20.4
Stream #0.0(und): Video: libx264, yuv420p, 1600x900 [PAR 1:1 DAR 16:9], q=-1--1, pass 1,
50000 kb/s, 90k tbn, 60 tbc
Metadata:
  creation_time   : 2013-12-24 11:10:47
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libx264)
Press ctrl-c to stop encoding
frame=    5 fps=  0 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   13 fps= 13 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   21 fps= 13 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   29 fps= 14 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   37 fps= 14 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   45 fps= 14 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   51 fps= 14 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit

EDIT2 Как и предполагалось, я попытался запустить с параметром -f matroska . На этот раз я также попытался сделать только один проход, так как думал, что второй был слишком трудоемким.

Вот команда, которую я использовал для преобразования:

avconv -threads 8  -y -i bbb_sunflower_native_60fps_normal.mp4
-acodec aac -vcodec h264 -f matroska -b:v 10000k  -r:v 60  
-filter:v yadif,scale=1600:900 -aspect 16:9 -b:a 320k r:a 96000
-ac 48 -vol 256  "bbb_sunflower_native_60fps_normal.mkv"

Но, к сожалению, терминал закрывается, как только я нажимаю Enter, чтобы подтвердить вывод avconv. Я попробовал ту же команду, только без -f matroska , но я не помог. То же самое случилось

Вот что было на выходе avconv:

avconv version 9.16-6:9.16-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
built on Aug 10 2014 18:16:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
'bbb_sunflower_native_60fps_normal.mp4':
Metadata:
major_brand     : isom
minor_version   : 1
compatible_brands: isomavc1
creation_time   : 2013-12-24 11:10:47
title           : Big Buck Bunny, Sunflower version
artist          : Blender Foundation 2008, Janus Bager Kristensen 2013
comment         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre           : Animation
composer        : Sacha Goedegebure
Duration: 00:10:34.56, start: 0.000000, bitrate: 10487 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 4000x2250 [PAR 1:1 DAR 16:9], 10002 kb/s,
60 fps, 60 tbr, 60k tbn, 120 tbc
Metadata:
  creation_time   : 2013-12-24 11:10:47
Stream #0.1(und): Audio: mp3, 48000 Hz, stereo, s16p, 160 kb/s
Metadata:
  creation_time   : 2013-12-24 11:10:49
Stream #0.2(und): Audio: ac3, 48000 Hz, 5.1, fltp, 320 kb/s
Metadata:
  creation_time   : 2013-12-24 11:10:49
[libx264 @ 0xe96580] using SAR=1/1
[libx264 @ 0xe96580] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0xe96580] profile High, level 4.2
[libx264 @ 0xe96580] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft
2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0
analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16
chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2
threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0
bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1
weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0
rc_lookahead=40 rc=abr mbtree=1 bitrate=10000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69
qpstep=4 ip_ratio=1.25 aq=1:1.00
encoder 'aac' is experimental and might produce bad results.
Add '-strict experimental' if you want to use it.
Press ENTER to continue...

1 ответ1

1

TL; DR: я бы использовал это для высококачественного и медленного однопроходного кодирования:

avconv -threads 8 -i bbb_sunflower_native_60fps_normal.mp4 \
-c:a aac -strict experimental -c:v h264 -crf 16 -preset veryslow \
-filter:v scale=1600:900 -aspect 16:9 -b:a 192k -ac 48 -vol 256 output.mp4

Прежде всего, чтобы получить какой-либо вывод:

  • Измените -f null на -f mp4 или -f matroska , в зависимости от того, хотите ли вы вывод MP4 или MKV. Если вы выполняете однопроходное кодирование, вам это вообще не нужно, поскольку выходное имя файла также автоматически устанавливает формат.

  • Измените -acodec aac на -acodec aac -strict experimental , поскольку внутренний кодировщик AAC считается нестабильным и нуждается в этом дополнительном флаге.

Тогда давайте перейдем к команде. Несколько вещей, чтобы настроить здесь:

Битрейт и контроль скорости

Битрейт очень высокий. Вам не нужно так много для видео HD 1600 × 900, даже при 60 кадрах в секунду. Половины этого было бы абсолютно достаточно для безупречного качества.

Вы упоминаете, что битрейт не является постоянным на протяжении всего видео. Это ожидаемо, так как было бы очень расточительно тратить х бит на каждый кадр. Вы хотите сохранить битрейт там, где можете, и тратить его на кадры, которые в этом нуждаются. Если вы хотите ограниченный битрейт, вам нужно кодирование VBV (например, для DVD или потоковой передачи), но это довольно сложно и обычно не требуется на практике. Двухпроходное кодирование CBR даст очень хорошие результаты.

Другим предложением для установки битрейта (косвенно) будет использование режима CRF. Вы устанавливаете его путем замены -b:v на -crf а затем устанавливаете коэффициент постоянной скорости в диапазоне от 0 до 51. 0 означает без потерь, 15–18 - отличное качество, а 23 - по умолчанию. Все, что выше, принесет вам заметное ухудшение качества. Использование CRF означает, что вы не можете определить битрейт заранее, но это обеспечит наилучшее возможное качество.

Аудио битрейт 320k уже немного "слишком", даже для AAC-LC и даже для внутреннего кодера. 192к должно хватить. Вы можете выбрать другой кодировщик, например libfdk-aac , который обеспечивает лучшие результаты при более низких битрейтах. Ваш ffmpeg должен быть скомпилирован с поддержкой для этого.

Frame-/samplerate и фильтрация

Вам не нужно явно устанавливать частоту кадров. Входная частота кадров будет сохранена как есть. Вам также не обязательно устанавливать частоту дискретизации 96 кГц для звука - это зависит от того, какой вы аудиофил.

Вам не нужен фильтр yadif , так как он используется для деинтерлейсинга. Поскольку Big Buck Bunny явно не переплетен, удалите фильтр.

скорость

Предустановка кодирования оказывает наибольшее влияние на скорость. См. Руководство по кодированию H.264 для списка предустановок. Медленнее означает лучшую эффективность сжатия (т. Е. Меньший размер файла для того же качества при использовании CRF или лучшее качество при использовании CBR), поэтому выберите самую медленную предустановку, которую вы можете ждать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .