Вот что я сделал с «original.mp4» (длительность 00:15:22, размер файла ~ 80 МБ):

  1. Извлеченный поток видео из mp4

    ffmpeg -i original.mp4 -c copy -an vid_only.mp4

  2. Извлеченный аудиопоток из mp4

    ffmpeg -i original.mp4 -vn -acodec copy aud_only.aac

  3. Объединил извлеченные аудио и видео потоки, чтобы сформировать новый mp4

    ffmpeg -i aud_only.aac -i vid_only.mp4 new_mix.mp4

И обнаружил, что «new_mix.mp4» был смешан точно, продолжительность была такой же, как и раньше, но размер файла снизился до 36 МБ (с ~ 80 МБ). Используя ffprobe для «original.mp4» и «new_mix.mp4», я обнаружил, что разница заключается в битрейте аудио и видео потоков.

Шаг № 1 и № 2 извлекали аудио и видео потоки без какого-либо перекодирования. Шаг № 3, предположительно объединял аудио и видео потоки, но занимал довольно много времени, поэтому, вероятно, выполнял перекодирование. Это правильно ? И если так, есть ли способ сказать ffmpeg не перекодировать во время слияния, сделать это быстрее и сохранить исходный битрейт?

2 ответа2

2

-c copy говорит ffmpeg о том, что нужно скопировать все обрабатываемые потоки. Это отсутствует.

ffmpeg -i aud_only.aac -i vid_only.mp4 -c copy new_mix.mp4

Кроме того, для шага 2, лучше извлечь в контейнер, как M4A

ffmpeg -i original.mp4 -vn -acodec copy aud_only.m4a

Если в вашем аудио есть пробелы во времени, .aac потеряет их.

0

Хорошо, мой плохой. Похоже, ответом был только поиск. Моды могут пометить вопрос как дубликат. Вот что мне нужно было сделать, чтобы получить исходный размер файла и сохранить исходный (более высокий) битрейт, т.е. объединить аудио + видео потоки без перекодирования (таким образом, намного быстрее):

`ffmpeg -i aud_only.aac -i vid_only.mp4 -acodec copy -vcodec copy mixed_copy.mp4`

Вот оригинальные вопросы и ответы здесь на этом сайте: Как объединить аудио и видео файл в ffmpeg

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