Я хотел бы использовать ffmpeg для преобразования видеофайла mp4 в avi, но с тем же качеством, даже если он занимает больше места. Если я просто сделаю:
ffmpeg -i file.mp4 file.mp4.avi
Результирующий avi-файл очень низкого качества и неровный. Как я могу выполнить это преобразование, сохранив при этом качество видео и звука?
Вы всегда немного теряете качество при перекодировании с одного кодека на другой, видео или аудио, но, возможно, вы можете избежать этого, если хотите перейти только с типа контейнера MP4 на контейнер AVI. codec:copy может быть полезно, если у вас нет причин для перекодирования (и это должно быть быстрее).
Если вам необходимо перекодировать, потому что вам нужно использовать определенный видеокодек, я надеюсь, что вы можете воспользоваться предложением зеты выше в его комментарии и использовать -sameq переключатель. В качестве альтернативы, вы можете использовать qscale возможность установить качество вручную. Чем меньше число, тем лучше качество, но тем больше места займет ваш файл.
В последний раз, когда я перекодировал видео, я использовал qscale=8.0, но я бы посоветовал вам поэкспериментировать, чтобы найти оптимальный вариант, соответствующий качеству вашего ввода.
Марти Джей услужливо упоминает, что sameq означает тот же квантователь, что и на входе, что может не привести к тому же качеству. В статье, которую он цитирует, упоминается использование многоходового преобразования, что является хорошим способом добиться лучшего сжатия без ущерба для качества.
Вы можете использовать переключатель -sameq, который поместит тот же видеокодек (предполагая, что H264) в контейнер AVI. Если ваш проигрыватель не поддерживает формат H264 в формате AVI, то вам нужно перекодировать наилучший возможный формат видео (H264) в какой-нибудь посредственный формат, что никуда не годится. Затем вы назначаете более высокий битрейт видео XVID (скажем, 2000 Кб/с). Аудио не имеет большого значения, ИМХО, но лучше конвертировать в MP3, чем в AC3