Вот что я сделал с «original.mp4» (длительность 00:15:22, размер файла ~ 80 МБ):
Извлеченный поток видео из mp4
ffmpeg -i original.mp4 -c copy -an vid_only.mp4
Извлеченный аудиопоток из mp4
ffmpeg -i original.mp4 -vn -acodec copy aud_only.aac
Объединил извлеченные аудио и видео потоки, чтобы сформировать новый 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 не перекодировать во время слияния, сделать это быстрее и сохранить исходный битрейт?