Используйте ffmpeg для преобразования mp4 в тот же высококачественный avi-файл?

Я хотел бы использовать ffmpeg для преобразования видеофайла mp4 в avi, но с тем же качеством, даже если он занимает больше места. Если я просто сделаю:

ffmpeg -i file.mp4 file.mp4.avi

Результирующий avi-файл очень низкого качества и неровный. Как я могу выполнить это преобразование, сохранив при этом качество видео и звука?

Вы всегда немного теряете качество при перекодировании с одного кодека на другой, видео или аудио, но, возможно, вы можете избежать этого, если хотите перейти только с типа контейнера MP4 на контейнер AVI. codec:copy может быть полезно, если у вас нет причин для перекодирования (и это должно быть быстрее).

Если вам необходимо перекодировать, потому что вам нужно использовать определенный видеокодек, я надеюсь, что вы можете воспользоваться предложением зеты выше в его комментарии и использовать -sameq переключатель. В качестве альтернативы, вы можете использовать qscale возможность установить качество вручную. Чем меньше число, тем лучше качество, но тем больше места займет ваш файл.

В последний раз, когда я перекодировал видео, я использовал qscale=8.0, но я бы посоветовал вам поэкспериментировать, чтобы найти оптимальный вариант, соответствующий качеству вашего ввода.

Марти Джей услужливо упоминает, что sameq означает тот же квантователь, что и на входе, что может не привести к тому же качеству. В статье, которую он цитирует, упоминается использование многоходового преобразования, что является хорошим способом добиться лучшего сжатия без ущерба для качества.

Мое решение:

ffmpeg -i filename.mp4 -vcodec copy -acodec copy filename.avi

Наслаждайтесь!!

Вот мой 2-проходной (Расширенный простой профиль) Я использую время от времени.

проход 1:

ffmpeg -i file.mp4 -vcodec mpeg4 -vtag XVID -b 990k -bf 2 -g 300 -s 640x360 -pass 1 -an -threads 0 -f rawvideo -y /dev/null

проход 2:

ffmpeg -i file.mp4 -vcodec mpeg4 -vtag XVID -b 990k -bf 2 -g 300 -s 640x360 -acodec libmp3lame -ab 128k -ar 48000 -ac 2 -pass 2 -threads 0 -f avi file.avi

Вы можете использовать переключатель -sameq, который поместит тот же видеокодек (предполагая, что H264) в контейнер AVI. Если ваш проигрыватель не поддерживает формат H264 в формате AVI, то вам нужно перекодировать наилучший возможный формат видео (H264) в какой-нибудь посредственный формат, что никуда не годится. Затем вы назначаете более высокий битрейт видео XVID (скажем, 2000 Кб/с). Аудио не имеет большого значения, ИМХО, но лучше конвертировать в MP3, чем в AC3