ffmpeg для преобразования .avi в .mp4 приводит к ошибке: не удалось найти тег для кодека dvvideo в потоке № 0, кодек в настоящее время не поддерживается в контейнере

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

Я попробовал эту команду:

 ffmpeg -i filename.avi -c:v copy -c:a copy -y filename.mp4

и получил этот вывод:

 configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-shared --disable-static --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp
  libavutil      57.  0.100 / 57.  0.100
  libavcodec     59.  1.101 / 59.  1.101
  libavformat    59.  3.100 / 59.  3.100
  libavdevice    59.  0.100 / 59.  0.100
  libavfilter     8.  0.102 /  8.  0.102
  libswscale      6.  0.100 /  6.  0.100
  libswresample   4.  0.100 /  4.  0.100
  libpostproc    56.  0.100 / 56.  0.100
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, avi, from 'Filename.avi':
  Metadata:
    TAPE            : Filename
    TCOD            : 653986667
  Duration: 00:01:54.01, start: 0.000000, bitrate: 30411 kb/s
  Stream #0:0: Video: dvvideo (dvsd / 0x64737664), yuv411p, 720x480 [SAR 8:9 DAR 4:3], 28779 kb/s, 29.97 fps, 29.97 tbr, 29.97 tbn
  Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s
[mp4 @ 000001d0ca8a1480] Could not find tag for codec dvvideo in stream #0, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:1 --
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
    Last message repeated 1 times

Он выводит файл .mp4 с сообщением об ошибке, что файл не может быть воспроизведен, и кодом ошибки 0xc10100be.

Кто-нибудь может интерпретировать происходящее? Какую команду вы бы порекомендовали здесь?

Большое спасибо!

Ответы (1)

Вы пытаетесь включить кодек (dvvideo) в контейнер (mp4), который его не поддерживает (по крайней мере, в ffmpeg). См. разницу между кодеком и контейнером . Вам лучше использовать кодек, поддерживаемый mp4, скажем, H.265 с использованием libx265, и попробовать конвертировать. Дополнительные параметры, которые вы можете применить, см. в документации . Вот обширный список кодеков, поддерживаемых mp4, но не все из них могут поддерживаться ffmpeg. Вот некоторые популярные кодеки . Кроме того, pcm_s16le — это необработанный аудиоформат, конвертируйте его в aac. Пытаться

ffmpeg -i filename.avi -c:v libx265 -x265-params lossless=1 -c:a libfdk_aac -b:a 128k -y filename.mp4

Он имеет кодировку без потерь H.265 и использует libfdk_aac, который имеет лучшее качество, чем родной.

Большое спасибо за эту полезную информацию!
Добро пожаловать @stars.in.the.sky. Если это решение работает для вас, вы можете пометить ответ как принятый.