В настоящее время я использую ffmpeg версии 3.2.2, и проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь преобразовать образец файла .flv, он не преобразует его должным образом в ожидаемый формат .mp4. Ошибка, с которой я сталкиваюсь:
ffmpeg -i flv.flv -vcodec copy -acodec copy flv.mp4
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
[flv @ 0x7f9af4800000] audio stream discovered after head already parsed
[flv @ 0x7f9af4800000] video stream discovered after head already parsed
Input #0, flv, from 'flv.flv':
Metadata:
encoder : Lavf53.24.2
Duration: 00:00:26.40, start: 0.000000, bitrate: 1589 kb/s
Stream #0:0: Audio: aac (LC), 48000 Hz, 5.1, fltp
Stream #0:1: Video: flv1, yuv420p, 1280x720, 25 fps, 25 tbr, 1k tbn
File 'flv.mp4' already exists. Overwrite ? [y/N] y
[mp4 @ 0x7f9af5829e00] Could not find tag for codec flv1 in stream #0, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argumentStream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (copy)
Last message repeated 1 times
Я попробовал воспользоваться несколькими онлайн-конвертерами, чтобы проверить, возникнут ли у них проблемы с конвертацией файла, но все они успешно конвертировали его в mp4.
Буду признателен за любую помощь по этому вопросу!
решение1
Как упоминалось в комментариях, ffmpeg не мультиплексирует flv1
видеопотоки в MP4.
Вместо этого перекодируйте:
ffmpeg -i flv.flv -vcodec libx264 -acodec copy flv.mp4
решение2
Если контейнер flv использует видеокодек flv1, вы не сможете преобразовать его в контейнер mp4 без перекодирования видеопотока.
2 варианта:
- Вместо этого преобразуйте в контейнер
mkv
без перекодирования:
ffmpeg -i input.flv -c copy -copyts output.mkv
Обратите внимание, что -copyts
это необязательно и означает copy timestamps
: это поможет синхронизировать звук.
- Перекодировать видеопоток в новый стандарт h265(HVEC):
ffmpeg -i input.flv -c:v libx265 -crf 23 -c:a copy output_h265.mp4