Почему я не могу конвертировать FLV в формат MP4, используя FFmpeg, когда работает MP3?
На самом деле мне удалось преобразовать FLV в MP3:
D:\tmp\ffmpeg-20121005-git-d9dfe9a-win64-static\ffmpeg-20121005-git-d9dfe9a-win
4-static\bin>ffmpeg.exe -i a.flv -acodec mp3 a.mp3
ffmpeg version N-45080-gd9dfe9a Copyright (c) 2000-2012 the FFmpeg developers
built on Oct 5 2012 16:49:01 with gcc 4.7.1 (GCC)
configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-run
ime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass
-enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-
ibfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopen
peg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libthe
ra --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-l
bvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --en
ble-zlib
libavutil 51. 73.102 / 51. 73.102
libavcodec 54. 63.100 / 54. 63.100
libavformat 54. 29.105 / 54. 29.105
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 19.102 / 3. 19.102
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 16.100 / 0. 16.100
libpostproc 52. 1.100 / 52. 1.100
Input #0, flv, from 'a.flv':
Metadata:
metadatacreator : iku
hasKeyframes : true
hasVideo : true
hasAudio : true
hasMetadata : true
canSeekToEnd : false
datasize : 16906383
videosize : 14558526
audiosize : 2270465
lasttimestamp : 530
lastkeyframetimestamp: 529
lastkeyframelocation: 16893721
Duration: 00:08:49.73, start: 0.000000, bitrate: 255 kb/s
Stream #0:0: Video: h264 (Main), yuv420p, 448x336 [SAR 1:1 DAR 4:3], 218 kb
s, 15 tbr, 1k tbn, 30 tbc
Stream #0:1: Audio: aac, 44100 Hz, stereo, s16, 32 kb/s
File 'a.mp3' already exists. Overwrite ? [y/N] y
Output #0, mp3, to 'a.mp3':
Metadata:
metadatacreator : iku
hasKeyframes : true
hasVideo : true
hasAudio : true
hasMetadata : true
canSeekToEnd : false
datasize : 16906383
videosize : 14558526
audiosize : 2270465
lasttimestamp : 530
lastkeyframetimestamp: 529
lastkeyframelocation: 16893721
TSSE : Lavf54.29.105
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16
Stream mapping:
Stream #0:1 -> #0:0 (aac -> libmp3lame)
Press [q] to stop, [?] for help
size= 8279kB time=00:08:49.78 bitrate= 128.0kbits/s
video:0kB audio:8278kB subtitle:0 global headers:0kB muxing overhead 0.006842%
Но мне не удалось конвертировать FLV в MP4. Почему кодировщик 'mp4' неизвестен? Более того, как я могу найти кодеки, которые уже поддерживаются моим FFmpeg?
D:\tmp\ffmpeg-20121005-git-d9dfe9a-win64-static\ffmpeg-20121005-git-d9dfe9a-win6
4-static\bin>ffmpeg.exe -i a.flv -acodec mp4 aa.mp4
ffmpeg version N-45080-gd9dfe9a Copyright (c) 2000-2012 the FFmpeg developers
built on Oct 5 2012 16:49:01 with gcc 4.7.1 (GCC)
configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runt
ime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass -
-enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-l
ibfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenj
peg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheo
ra --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-li
bvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --ena
ble-zlib
libavutil 51. 73.102 / 51. 73.102
libavcodec 54. 63.100 / 54. 63.100
libavformat 54. 29.105 / 54. 29.105
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 19.102 / 3. 19.102
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 16.100 / 0. 16.100
libpostproc 52. 1.100 / 52. 1.100
Input #0, flv, from 'a.flv':
Metadata:
metadatacreator : iku
hasKeyframes : true
hasVideo : true
hasAudio : true
hasMetadata : true
canSeekToEnd : false
datasize : 16906383
videosize : 14558526
audiosize : 2270465
lasttimestamp : 530
lastkeyframetimestamp: 529
lastkeyframelocation: 16893721
Duration: 00:08:49.73, start: 0.000000, bitrate: 255 kb/s
Stream #0:0: Video: h264 (Main), yuv420p, 448x336 [SAR 1:1 DAR 4:3], 218 kb/
s, 15 tbr, 1k tbn, 30 tbc
Stream #0:1: Audio: aac, 44100 Hz, stereo, s16, 32 kb/s
Unknown encoder 'mp4'
Изменить 1:
[bigmeow@home bin]$ ./ffmpeg -formats | wc -l
ffmpeg version N-45533-gb08273c Copyright (c) 2000-2012 the FFmpeg developers
built on Oct 15 2012 17:59:59 with gcc 4.1.2 (GCC) 20080704 (Red Hat 4.1.2-52)
configuration: --disable-yasm --prefix=/var/lib/gforge/chroot/home/users/mirror/ins/ins-ffmpeg
libavutil 51. 76.100 / 51. 76.100
libavcodec 54. 66.100 / 54. 66.100
libavformat 54. 32.101 / 54. 32.101
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 19.102 / 3. 19.102
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 16.100 / 0. 16.100
221
Редактировать 2: не могу использовать кодек libfaac, почему?
4-static\bin>ffmpeg -i a.flv -c:a libfaac -vn aa2x.m4a
ffmpeg version N-45080-gd9dfe9a Copyright (c) 2000-2012 the FFmpeg developers
built on Oct 5 2012 16:49:01 with gcc 4.7.1 (GCC)
configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runt
ime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass -
-enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-l
ibfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenj
peg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheo
ra --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-li
bvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --ena
ble-zlib
libavutil 51. 73.102 / 51. 73.102
libavcodec 54. 63.100 / 54. 63.100
libavformat 54. 29.105 / 54. 29.105
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 19.102 / 3. 19.102
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 16.100 / 0. 16.100
libpostproc 52. 1.100 / 52. 1.100
Input #0, flv, from 'a.flv':
Metadata:
metadatacreator : iku
hasKeyframes : true
hasVideo : true
hasAudio : true
hasMetadata : true
canSeekToEnd : false
datasize : 16906383
videosize : 14558526
audiosize : 2270465
lasttimestamp : 530
lastkeyframetimestamp: 529
lastkeyframelocation: 16893721
Duration: 00:08:49.73, start: 0.000000, bitrate: 255 kb/s
Stream #0:0: Video: h264 (Main), yuv420p, 448x336 [SAR 1:1 DAR 4:3], 218 kb/
s, 15 tbr, 1k tbn, 30 tbc
Stream #0:1: Audio: aac, 44100 Hz, stereo, s16, 32 kb/s
Unknown encoder 'libfaac'
D:\tmp\ffmpeg-20121005-git-d9dfe9a-win64-static\ffmpeg-20121005-git-d9dfe9a-win6
1 ответ
Почему вы не можете "конвертировать в MP4 видео":
Вот почему это не работает:
"MP3" - это MPEG-2 Layer III, аудиокодек, а также название контейнера, в котором часто хранится кодек. Он даст вам
.mp3
файлы.MP4 не является кодеком. MP4 - это имя контейнера MPEG-4 Part 14, который может хранить видео MPEG-4 Part 2 (например, XviD), видео MPEG-4 Part 10 (например, x264) или аудио MPEG-4 в
.mp4
файлы. Аудио MPEG-4 называется Advanced Audio Coding (AAC) и также может быть сохранено в.m4a
- это просто другое расширение, но тот же контейнер.
Вот почему вы не можете кодировать в "MP4" - такого аудиокодека нет. Чтобы понять разницу, прочитайте следующее: Что такое кодек (например, DivX?) И чем он отличается от формата файла (например, MPG)?
Как кодировать в AAC аудио в MP4:
Для кодирования в аудио AAC - вообще без видео - у вас есть различные варианты, такие как встроенный кодер AAC:
ffmpeg -i a.flv -c:a aac -strict -2 -vn aa.m4a
Вы должны включить -vn
опция, потому что FFmpeg предполагает, что с контейнером MP4 вы хотите закодировать аудио и видео потоки. -vn
отключает кодирование видео
Если вы хотите видео вместе со звуком, просто удалите -vn
вариант и выберите .mp4
как продолжение. FFmpeg теперь будет использовать libx264
кодировать видео.
Как контролировать качество
Для контроля качества продукции используйте -b:a
предоставить битрейт, например -b:a 192k
,
Как получить список кодеков:
Наконец, чтобы узнать, какие кодеки FFmpeg можно декодировать (D
) или кодировать (E
):
ffmpeg -codecs
А чтобы узнать контейнеры FFmpeg можете прочитать (D
) или напишите (E
):
ffmpeg -formats
* В вашем конкретном случае только libvo_aacenc
включен, libfaac
не является. Это потому, что он не был скомпилирован с вашей статической сборкой Windows.