Пакетное преобразование H.265 mkv к H.264 с ffmpeg к make-файлам, совместимым для перекодирования

У меня есть закодированные файлы H.265, которые являются таким образом интенсивно использующие ресурсы, они не играют хорошо, и мое программное обеспечение преобразования (mencoder) (в настоящее время) не поддерживает формат H.265. Я могу преобразовать их в H.264 в пакетном файле командной строки для быстрого преобразования файлов для повторного сжатия с помощью Devede/OGMrip? После поиска этого сайта я не нашел, что он обсудил так, я отправлю то, что я чувствую, полезный вопрос и ответ на вопрос.

31
задан 9 December 2015 в 01:19

3 ответа

Да, использование ffmpeg.

Открывают терминальное и предписывают, чтобы это к каталогу, содержащему H.265, закодировало файлы, предположив, что Вы имеете ffmpeg и соответствующие установленные библиотеки и предположение, что они находятся в формате MKV, копируют и вставляют следующее в окно терминала.

INPUT="$1"
for i in *.mkv ; do
    ffmpeg -i "$i" -bsf:v h264_mp4toannexb -sn -map 0:0 -map 0:1 -vcodec libx264 "$i.ts"
    mv "$i.ts" "$i.mpg"
    sleep 3
done

Там у Вас есть он. Это преобразует в h.264 в контейнере MPG в том же каталоге.

Объяснение командных коммутаторов:

  • for i in *.mkv ; do ... done

    Это настраивает все .mkv файлы в каталоге, который будет включен в пакетную обработку. Это может быть изменено для размещения контейнерного расширения файлов, которые Вы хотите обработать.

  • ffmpeg -i "$i" Выполняет программу ffmpeg и призывает, чтобы файлы были обработаны.

    • -bsf:v активирует видео фильтр потока битов, который будет использоваться.

    • h264_mp4toannexb - фильтр потока битов, который активируется.

      Преобразовывают поток битов H.264 из снабженного префиксом режима длины для запуска, код снабдил префиксом режим (как определено в Приложении B спецификации ITU-T H.264).

      Это требуется некоторыми форматами потоковой передачи, обычно транспортный потоковый формат (mpegts) MPEG-2, обрабатывающий MKV h.264 (в настоящее время), требует этого, если не будет включен, то Вы получите ошибку в окне терминала, дающем Вам команду использовать его.

    • -sn остановки потоковая передача потоков подзаголовка (для тех, которые не хотят подзаголовки в их видео) Это является дополнительным и может быть удалено.

    • -map 0:0 -map 0:1 Говорит, ffmpeg, чтобы только обработать первые два потока файла (0:0 видеопоток, 0:1 первый аудиопоток файла). Это делает две вещи, разделяет избыточные аудиопотоки, обычно первый аудиопоток является английским, но не всегда. Другие потоки, такие как встроенные подзаголовки удалены, уменьшив размер файла. Это - также дополнительная строка. Можно использовать ffprobe для просмотра потоков, доступных в файле. -map является дополнительным и может быть отброшен от команды.

    • -vcodec libx264 Это говорит, что ffmpeg для кодирования вывода к H.264

    • "$i.ts" Сохраняет вывод к формату .ts, это полезно, чтобы не перезаписать исходные файлы.

  • mv "$i.ts" "$i.mpg" Преобразовывает расширение файла в MPG в том же каталоге. Это может быть настроено для отправки его в любой каталог, который Вы любите.

  • sleep 3 - позволяет процессу оставлять предоставление ffmpeg время для организации очередей следующего файла

37
ответ дан 23 November 2019 в 00:43

Рассматривая предыдущие ответы, я придумал следующее:

for file in *265.mkv; do nice -n19 ffmpeg -i $file -c copy -c:v libx264 ${file/%265.mkv/264.mkv}; done

Это принимает, что файлы всегда имеют имя, заканчивающееся в 265.mkv. Это окончание будет заменено 264.mkv.

, Если Ваше именование файла отличается, необходимо адаптировать команду соответственно.

0
ответ дан 23 November 2019 в 00:43

Пакетное преобразование H.265 к H.264

Эти примеры были записаны для недавнего ffmpeg. Сохраните себя некоторая проблема и загрузите последнюю версию. Затем поместите ffmpeg двоичный файл в ~/bin или /usr/local/bin (Вам, вероятно, придется выйти из системы, затем входят в систему, чтобы это было замечено).

Matroska производится

mkdir h264vids
for f in *.mp4; do ffmpeg -i "$f" -map 0 -c copy -c:v libx264 -crf 23 -preset medium h264vids/"${f%.*}.mkv"; done
  • Этот пример произведет к названному каталогу h264vids.

  • Этот пример предполагает, что Ваши исходные данные .mp4. В противном случае изменитесь .mp4 экземпляр в примере к Вашему входному типу файла, или просто используют жадное * отдельно.

  • Корректироваться -crf по качеству и -preset для кодирования скорости/эффективности. Или просто удалите эти опции и используйте значения по умолчанию, которые довольно хороши и должны быть достаточными для большинства (пример использует значения по умолчанию для этих опций). См. Wiki FFmpeg: H.264 для большего количества информации об этих опциях.

MP4 производится

Этот немного более сложен. Это выполнит условное кодирование, зависящее, если входное аудио будет AAC или нет. Если входное аудио будет AAC затем, то аудио будет потоком, скопированным (повторно мультиплексированный), как, и бесполезного перекодирования избегают. Если входное аудио не будет AAC затем, то это будет повторно закодировано к AAC.

Вот простой сценарий, демонстрирующий, как сделать это использование ffprobe и ffmpeg. Скопируйте и сохраните его к каталогу, содержащему Ваши видео, которые будут преобразованы, дайте его, выполняют разрешение с chmod +x yourscriptname, затем выполните его с ./yourscriptname.

#!/bin/bash

mkdir h264vids

for f in *.mkv
do
  audioformat=$(ffprobe -loglevel error -select_streams a:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$f")
  if [ "$audioformat" = "aac" ]; then
    ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a copy -movflags +faststart h264vids/"${f%.*}.mp4"
  else
    ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a aac -movflags +faststart h264vids/"${f%.*}.mp4"
  fi
done
  • Этот пример произведет к названному каталогу h264vids.

  • Этот пример предполагает, что Ваши исходные данные .mkv. В противном случае изменитесь .mkv экземпляр в примере к Вашему входному типу файла, или просто используют жадное * отдельно.

  • См. примечание выше оценки -crf и -preset.

  • Можно приостановить кодирование ctrl+z и возобновиться с fg.

20
ответ дан 23 November 2019 в 00:43

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

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