FFMPEG Splitting MP4 с таким же качеством

51

У меня есть один большой файл MP4. Я пытаюсь разбить его на более мелкие файлы.

ffmpeg -i largefile.mp4 -sameq -ss 00:00:00 -t 00:50:00 smallfile.mp4

Я думал, что использование -sameq сохранит те же настройки качества. Однако я не должен понимать, что это делает.

Я надеюсь сохранить одинаковое качество (аудио / видео) и сжатие с разделенными файлами Однако этот параметр значительно увеличивает размер разделяемых файлов.

Какой флаг (ы) мне нужно установить, чтобы сохранить одинаковое качество и атрибуты в разделенных файлах при одинаковом соотношении качества и размера?

Например, если мой исходный файл составляет около 12 ГБ и имеет размер 1920x1080 с битрейтом 10617 кбит / с и частотой кадров 23 кадра / с и 6-канальным аудио со скоростью 317 кбит / с, я бы хотел, чтобы разделенные файлы были такими же, только треть этого размера ( если я разделю это на три части).

Крис Вебер
источник
3
К сведению всех, кто читает это: не используйте -sameq, это не означает «то же качество» .
Заз

Ответы:

81

Если вы хотите просто разделить видео без перекодирования, используйте copyкодек для аудио и видео. Попробуй это:

ffmpeg -ss 00:00:00 -t 00:50:00 -i largefile.mp4 -acodec copy \
-vcodec copy smallfile.mp4

Обратите внимание, что это создает только первый сплит. Следующее можно сделать командой, начинающейся с ffmpeg -ss 00:50:00.

Это можно сделать с помощью одной команды:

ffmpeg -i largefile.mp4 -t 00:50:00 -c copy smallfile1.mp4 -ss 00:50:00 -c copy smallfile2.mp4

Это создаст smallfile1.mp4, заканчивающийся через 50 минут в видео largefile.mp4 и smallfile2.mp4, начинающийся через 50 минут и заканчивающийся в конце largefile.mp4.

fideli
источник
2
Используя этот метод для файла mp4, я получаю первые две секунды каждого созданного файла в виде стоп-кадра (звук воспроизводится нормально). Любая известная причина для этого?
Рон Харлев
Похоже, ошибка. Обновление до последней версии ffmpeg.
Роберт
@ Роберт Я обновлялся много раз с 2010 года. Спасибо.
Фидели
@RonHarlev Это ожидаемое в настоящее время поведение. Без перекодирования вы можете вырезать видео только в «ключевых кадрах». Кадры между ключевыми кадрами сами по себе не содержат достаточного количества информации для создания полного изображения. Смотрите: trac.ffmpeg.org/wiki/Seeking#Seeking whiledoingacodeccopy
Филипп Трашер
3

Альтернативный способ сделать это:

// create a 2-min clip
ffmpeg -i input.mp4 -ss 00:10:00 -to 00:12:00 -c copy output.mp4

/**
* -i  input file
* -ss start time in seconds or in hh:mm:ss
* -to end time in seconds or in hh:mm:ss
* -c codec to use 
*/

Качество файла остается неизменным, потому что мы используем -c copyдля копирования исходных аудио + видео потоков на выход.

Ссылка, список часто используемых команд FFmpeg: DigitalFortress

Никет патхак
источник