Как получить лучшее качество при конвертации из mp4 в avi с помощью ffmpeg?

11

Когда я использую это, качество не выглядит плохо.

ffmpeg -same_quant -i video.mp4 video.avi

В ffmpegдокументации написано: «Обратите внимание, что это НЕ ТО ЖЕ КАЧЕСТВО. Не используйте эту опцию, если вы не знаете, что вам это нужно».

Получу ли я -same_quantлучшее качество или есть опция, которая дает то же качество, что и вход, и более рекомендуется?

sid_com
источник
В зависимости от используемых кодеков (некоторые кодеки несовместимы с некоторыми контейнерами), вы всегда можете просто скопировать streams ( -codec copy). Это лучший способ избежать качественных изменений, поскольку вы не перекодируете потоки, а просто перепаковываете их в другой контейнер.
njsg
Когда я пытаюсь это я получаю: Unknown decoder 'copy'.
sid_com
3
Кажется, -codec copyдолжно идти после -i video.mp4 - вы можете попробовать ffmpeg -i video.mp4 -codec copy video.avi? ( -same_quantздесь тоже работает, но ничего не будет делать, так как это просто копирует потоки)
njsg
Относительно размещения параметров командной строки ffmpeg , см. Документация ffmpeg - 2 Описание : Вот выдержка: Как правило, параметры применяются к следующему указанному файлу. Поэтому порядок важен, ...
Peter.O
Спасибо! Теперь с -codec copyв нужном месте работает.
sid_com

Ответы:

14

(адаптировано из комментариев выше)

В зависимости от используемых кодеков (некоторые кодеки несовместимы с некоторыми контейнерами), вы всегда можете просто скопировать streams ( -codec copy). Это лучший способ избежать качественных изменений, поскольку вы не перекодируете потоки, а просто перепаковываете их в другой контейнер.

При работе с аудио / видео файлами важно помнить, что контейнеры в основном не зависят от используемых кодеков. Люди часто называют файлы «AVI video» или «MP4 video», но они являются контейнерами и мало говорят нам о том, сможет ли проигрыватель воспроизводить потоки, помимо технических ограничений (например, AVI может иметь проблемы с h264 и Ogg Vorbis ), вы можете использовать любой кодек.

-same_quantПохоже, это способ сказать ffmpeg, чтобы он пытался достичь аналогичного качества, но как только вы перекодируете видео (по крайней мере, с помощью кодеков с потерями), у вас не будет способа получить такое же качество. Если вас интересует качество, хорошее правило - избегать перекодирования потоков, когда это возможно.

Итак, чтобы скопировать потоки с помощью ffmpeg, вы должны сделать:

ffmpeg -i video.mp4 -codec copy video.avi

( Как упоминалось в @ Peter.O , порядок опций важен, так что это то, куда -codec copyнужно идти. Вы все еще можете сохранить -same_quant, но это не будет иметь никакого эффекта, поскольку вы не перекодируете потоки.)

njsg
источник
Ваше решение работает для меня. Я вижу, что avconvсейчас рекомендуется вместо ffmpegи на самом деле это то, что я использовал.
Фахим Митха
3

В FreeBSD 8.2 я пробовал копировать -codec, но я также получил декодированное сообщение неизвестно. После проб и ошибок я обнаружил, что работает под FreeBSD:

ffmpeg -i video.mp4 -vcodec copy video.avi
binyo66
источник