5

С помощью ffmpeg я конвертирую видео из mp3 и изображения, чтобы загрузить его на YouTube. После загрузки преобразование не выполняется. Причины неизвестны. Я считаю, что проблема в формате. Между прочим, если я загружаю файл продолжительностью 5 минут, произойдет сбой, если я загружу 30 секунд этого файла, это удастся.

У меня есть Donwload MP4 файл с YouTube. Затем я загрузил его, это делается очень быстро. Поэтому хорошим решением было бы преобразовать видео в тот же формат, что и в Google.

Я получил следующий вывод по MPEG:

ffmpeg version N-44264-g070b0e1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Sep  7 2012 17:38:57 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. 72.100 / 51. 72.100
  libavcodec     54. 55.100 / 54. 55.100
  libavformat    54. 25.105 / 54. 25.105
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3. 16.100 /  3. 16.100
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'youtubetrack0.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2012-10-02 22:58:57
  Duration: 00:06:46.66, start: 0.000000, bitrate: 176 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yu
v420p, 450x360, 78 kb/s, 6 fps, 6 tbr, 12 tbn, 12 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 95
kb/s
    Metadata:
      creation_time   : 2012-10-02 22:58:57
      handler_name    : IsoMedia File Produced by Google, 5-11-2011

Можно ли построить параметры ffmpeg так, чтобы это давало тот же формат, что и в Google? Достаточно ли приведенной выше информации?

Я не мог создать необходимые параметры.

Например, я не понимаю, как установить tbn и что означает 95 кбит / с в «Потоке № 0: 1(und): Audio:».

Теперь я просто делаю: ffmpeg -i videoimage.jpg -i audio.mp3 video.mp4

Информация у меня есть:

ffmpeg version N-44998-gdf82454 Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct  2 2012 23:03:12 with gcc 4.7.1 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3
 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib
--enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --en
able-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame
--enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger -
-enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --
enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enab
le-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 73.101 / 51. 73.101
  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, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf54.25.105
  Duration: 00:06:46.81, start: 0.000000, bitrate: 129 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p, 450x360,
 3392 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 127
 kb/s
    Metadata:
      handler_name    : SoundHandler

Это видео не удалось конвертировать на YouTube.

Я также пытался использовать другие vcode parmam и расширения выходного файла (mp4, wmv, avi), но тоже не получилось.

Был бы признателен за помощь.

2 ответа2

7

Эти параметры работают для меня, как в: видео не подвергается дальнейшей обработке / перекодированию на YouTube после загрузки.

ffmpeg -i SOURCE -c:v libx264 -flags:v "+cgop" -g 15 -bf 1 -coder ac -profile:v high -crf 25 -pix_fmt yuv420p -c:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart OUTPUT.mp4

Возможно, вы захотите попробовать -bf 2 вместо 1, но это привело к перекодированию в моем тесте. Чтобы получить более высокое качество видео, уменьшите параметр -crf, обычно 20-28 - рекомендуемый диапазон с более низкими значениями, обеспечивающими более высокое качество. Я не пробовал делать двухпроходное кодирование, cbr или abr, но оно должно работать. Вы также можете понизить звук до битрейта 192k.

ВАЖНО: обратите внимание, что вам нужно установить -g X равным половине вашей частоты кадров. В этом примере я кодирую видео 30 кадров в секунду, поэтому я установил GOP на 15. Если ваш источник 24 к / с, установите его на 12, если это 60 к / с, установите на 30.

Я знаю, что это старый вопрос, но это первый результат в Google, когда вы ищете "опции ffmpeg для YouTube".

Изменить: я получил эти параметры из https://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/

5

YouTube должен иметь возможность использовать практически все, что вы ему кормите. Он всегда будет транскодировать ваше видео независимо от того, какие именно форматы вы предоставляете, например, потому что ему нужно предоставить для вашего видео другие разрешения или другие контейнеры, такие как FLV или WebM, даже если он загружен в контейнер MP4.

Основная команда для создания видео для YouTube будет:

ffmpeg -i input.avi -c:v libx264 -c:a aac -strict experimental -b:a 192k out.mp4

Вам просто нужно изменить качество и, в конечном итоге, частоту кадров с -r и размером видео с -s:v чтобы соответствовать расширенным спецификациям кодирования, чтобы ваше видео не содержало столбцов или почтовых ящиков (т.е. с черными полями).

Дополнительную информацию и общее представление о FFmpeg можно найти в нашей записи блога: FFmpeg: совершенный инструмент для манипуляции с видео и аудио


Но вы создаете видео с одним изображением, которое зацикливается, поэтому вы должны указать FFmpeg зациклить изображение с -loop 1 на время, указанное в -t , например, 5 минут:

ffmpeg -loop 1 -f image2 -i image.jpg -c:v libx264 -t 00:05:00.000 out.mp4

Для аудиопотока просто добавьте второй параметр -i :

ffmpeg -loop 1 -f image2 -i image.jpg -i audio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -t 00:05:00.000 out.mp4

Затем FFmpeg автоматически сопоставит потоки, ваше изображение с видео h.264 и ваше аудио с AAC:

Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)
  Stream #1:0 -> #0:1 (mp3 -> aac)

Это видео должно быть совместимо с YouTube с частотой кадров 25. Если вы хотите изменить это, используйте -r и установите другую частоту кадров. Я успешно загрузил видео на YouTube с частотой кадров 1 - потому что не имеет значения, есть ли у вас только одно изображение и звуковая дорожка в фоновом режиме.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .