Какой формат вывода ffmpeg (-f) я использую для двухпроходного кодирования файлов mkv

Недавно я сделал резервную копию одного из своих фильмов на Blu-ray, и его размер составляет около 36 ГБ. Используя ffmpeg для получения информации из видео, оно находится в формате h.264 в контейнере mkv. Я хочу уменьшить размер файла, используя сжатие h.265 и целевую скорость передачи данных 4 Мбит / с, чтобы я мог передавать его, находясь вдали от дома, через свой сервер Plex. Моя скорость загрузки ограничена 5 Мбит/с.

Хотя я мог бы легко сделать это с помощью простого программного обеспечения, я хочу больше узнать о программировании. Я нашел правильный код ffmpeg для двухпроходного кодирования, но во всех примерах, которые я нашел, они используют выходной формат mp4, но заявляют, что «вам нужно указать выходной формат (с -f), который соответствует выходному формату, который вы будете использовать во втором проходе». Я предполагаю, что мой «выходной формат» - mkv, но это не позволяет запускать мой код. Может ли кто-нибудь объяснить мне, что подразумевается под форматом вывода и что я должен использовать для кодирования этого из h264 в h265 в контейнере mkv?

ffmpeg -y -i input.mkv -c:v libx265 -b:v 4M -x265-params pass=1 -an -f mkv /dev/null && \ ffmpeg -i "Arrival (2016).mkv" -c:v libx265 -b:v 4M -x265-params pass=2 -c:a copy output.mkv 

Кроме того, чтобы это работало на моем ПК с Windows, я пытаюсь научиться редактировать некоторые аргументы, чтобы они работали в Powershell. Я считаю, что вот как бы я это сделал:

(ffmpeg -y -i input.mkv -c:v libx265 -b:v 4M -x265-params pass=1 -an -f mkv NUL) -AND (^ ffmpeg -i "Arrival (2016).mkv" -c:v libx265 -b:v 4M -x265-params pass=2 -c:a copy  output.mkv)

person Mav-Tek    schedule 16.05.2020    source источник
comment
какое устройство вы собираетесь просматривать в нем, когда вдали от дома?   -  person somebadhat    schedule 16.05.2020
comment
См. bing.com/search?q=ffmpeg+encoding+for+streaming.   -  person somebadhat    schedule 16.05.2020
comment
разобрался с командой powershell.   -  person somebadhat    schedule 16.05.2020


Ответы (2)


Используйте 1_. mkv — это обычное расширение файла для формата контейнера matroska. Обычно ffmpeg использует имя выходного файла для угадывания выходного формата (например, *.ts -> mpegts, *.mp4 -> mp4 и т. д.). См. выходные данные ffmpeg -formats для получения списка допустимых мультиплексоров и демультиплексоров.

person Community    schedule 16.05.2020

Как выбрать кодек и контейнер ffmpeg для видеосервера с низкой пропускной способностью:

Вы можете загрузить, установить и использовать Handbrake для 64-разрядной версии Windows и WinFF, чтобы узнать, какие настройки использовать.

Пользователи Windows используют NUL вместо /dev/null и ^ вместо \
Пользователи не-Windows используют /dev/null вместо NUL и \ вместо ^

ffmpeg -y -i "1.mkv" -c:v libx265 -b:v 4M -pass 1 -an -f matroska NUL &&^
ffmpeg -i "1.mkv" -c:v libx265 -b:v 4M -pass 2 -c:a aac -b:a 128k "output.mkv" 
rem 

такой же как

ffmpeg -y -i "1.mkv" -c:v libx265 -b:v 4M -pass 1 -an -f matroska NUL && ffmpeg -i "1.mkv" -c:v libx265 -b:v 4M -pass 2 -c:a aac -b:a 128k "output.mkv" 
rem 

Возможно, вы захотите сравнить коэффициент постоянной скорости (CRF) с двухпроходным ABR и 265 с 264. 720p в контейнере mp4, H264 с максимальным битрейтом 4 Мбит/с и аудио AAC могут быть вашим лучшим выбором. CRF265 создает самый маленький файл.

Сделайте 15-секундное видео, начиная с 1 минуты, в:

ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx264 -b:v 4M -filter:v scale=1280:720 -preset slow -c:a copy -t 00:00:15 "outputSlow264720p.mp4" &&^
ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx264 -b:v 4M -f matroska -c:a copy -t 00:00:15 "outputSlow264.mkv" &&^
ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx265 -crf 28 -f matroska -c:a copy -t 00:00:15 "outputCRF265.mkv" &^
ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx265 -b:v 4M -f matroska -c:a copy -t 00:00:15 "output4M265.mkv" &^
ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx264 -preset slow -crf 22 -f matroska -c:a copy -t 00:00:15 "outputCRF264Slow.mkv" &^
ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx264 -b:v 4M -f matroska -c:a copy -t 00:00:15 "output4M264.mkv"
rem   

См. https://trac.ffmpeg.org/wiki/Encode/H.265 Эти преимущества будут наиболее заметны при разрешении 1080p и выше.
См. https://trac.ffmpeg.org/wiki/Encode/H.264 CRF: рекомендуемый режим управления скоростью для большинства случаев.
См. https://programminghistorian.org/en/lessons/introduction-to-ffmpeg
См. https://opensource.com/article/17/6/ffmpeg-convert-media-file-formats
См. https://davidhide.com/2019/02/03/compressing-audio-with-ffmpeg-и-powershell/

См. https://slhck.info/video/2017/02/24/crf-guide.html

PowerShell в одну строку с заменой ^ и && : вывод h265.mkv и h264.mp4 за 2 прохода

ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx265 -b:v 4M -pass 1 -an -f matroska -t 00:00:15 NUL; if($?) {ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx265 -b:v 4M -pass 2 -c:a copy -t 00:00:15 "output.mkv"}
ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx264 -b:v 4M -pass 1 -an -f mp4 -t 00:00:15 NUL; if($?) {ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx264 -b:v 4M -pass 2 -c:a copy -t 00:00:15 "output.mp4"}
rem 

PowerShell в две строки: 720p h264.mp4 2-проходный вывод

ffmpeg -ss 00:01:00 -i "1.mkv" -c:v libx264 -b:v 4M -filter:v scale=1280:720 -preset slow -c:a copy -t 00:00:15 -pass 1 output.mp4
ffmpeg -ss 00:01:00 -y -i "1.mkv" -c:v libx264 -b:v 4M -filter:v scale=1280:720 -preset slow -c:a copy -t 00:00:15 -pass 2 output.mp4
rem 

Предустановка — см. https://trac.ffmpeg.org/wiki/Encode/H.264

Предустановка — это набор параметров, которые обеспечат определенную скорость кодирования по отношению к коэффициенту сжатия. Более медленная предустановка обеспечит лучшее сжатие (сжатие — это качество на размер файла). Это означает, что, например, если вы ориентируетесь на определенный размер файла или постоянный битрейт, вы добьетесь лучшего качества с более медленным пресетом. Точно так же для кодирования постоянного качества вы просто сэкономите битрейт, выбрав более медленный пресет.

Используйте самый медленный пресет, на который у вас хватит терпения. Доступные пресеты в порядке убывания скорости:

ultrafast
superfast
veryfast
faster
fast
medium – default preset
slow
slower
veryslow
person somebadhat    schedule 16.05.2020
comment
Спасибо. Кажется, любая вариация &&, &&^ или &^ не распознается в моей версии powershell. Я получаю сообщение об ошибке, что символ & не поддерживается. Однако он работает в cmd.exe, я просто надеялся лучше познакомиться с powershell. Одинаково ли & vs && в cmd.exe? Я предполагаю, что символ ^ - это просто способ указать новую строку в оболочке? - person Mav-Tek; 16.05.2020
comment
@mav & означает выполнение следующей команды && означает выполнение следующей команды, только если предыдущая команда выполнена успешно. Обновленный ответ с командами powershell. - person somebadhat; 16.05.2020