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

28

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

ffmpeg -i file.mp4 file.mp4.avi

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

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

Ответы:

16

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

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

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

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

Джон С. Грубер
источник
Спасибо за подсказки, попробую -sameqпосмотреть как получится .
719016
8
-Sameq не означает то же качество; ffmpeg.org/trac/ffmpeg/wiki/...
3
Кажется, рекомендуется использовать эту -qscale 0опцию
user989762
Довольно старый, но я получил это предупреждение, пытаясь сделать это сегодня:Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option.
Дейв Лугг
10

Мое решение:

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

Наслаждаться!!

Kuba
источник
2
Имейте в виду, что встраивание потоков AVC в контейнеры AVI требует взлома, который поддерживается многими видеопроигрывателями, управляемыми сообществом (например, VLC, MPlayer, что угодно, FFmpeg / Libav или GStreamer, Media Player Classic), но не многими коммерческими проигрывателями (например, Windows Media Player). и QuickTime / iTunes не поддерживают его).
Дэвид Фёрстер
4

Вот мой 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
duffydack
источник
Это здорово, выпустил мне очень маленький AVI с очень хорошим качеством!
jpo38