1

Я пытаюсь найти информацию о том, как перекодировать файл в несколько выходов за один раз, но, похоже, не могу. Большинство результатов, которые я нахожу, описывают обратное: объединение нескольких файлов в один.

Вот ситуация:

У меня есть IP-камера, которая принимает "дамп" или необработанный снимок (хотя я не люблю говорить "необработанный", потому что он может быть ошибочно принят в формате .raw), который состоит из двух потоков: видео H264 и аудио PCM ,

Мне нужно перекодировать этот захват «raw /dump» в три файла MP4, два из них с аудио и видео (H264+AAC) и третий с только аудио AAC; более конкретно:

  1. Файл с тем же разрешением, что и оригинал, обеспечивает скорость 30 кадров в секунду, звук aac со скоростью 128 кбит / с и формат пикселя - yuv420p (пиксельный формат "сброшенного" видеопотока - yuvj420p, что делает поток в невоспроизводимом виде непосредственно в Chrome .. по крайней мере на данный момент).

  2. Файл с теми же функциями, что и выше, но с половиной разрешения.

  3. Файл, содержащий только аудио AAC.

У меня есть команда, чтобы заставить первый файл работать довольно хорошо (хотя у меня есть кто-то для этого комментария, это будет с благодарностью оценено):

    /usr/bin/avconv "/home/borrajax/Videos/original.dump" \
    -acodec libvo_aacenc -ac 1 -ab 128k -ar 44100 \
    -vcodec libx264 -preset fast -r 30 -pix_fmt yuv420p \
    "/home/borrajax/Videos/transcoded.mp4"

Возможно, я мог бы сохранить некоторые параметры, но проблема в том, что конфигурацию камеры можно изменить, поэтому мне нужно убедиться, что полученный .mp4 имеет нужный мне формат (именно поэтому я указал так много)

Я думаю, что это , вероятно , хорошая идея (я говорю "наверное" , потому что я не знаю , что угодно о кодировании видео) пытается перекодировать три файла в одном кадре, повторное использование транскодированных данных , чтобы сэкономить время.

Например: видео с половиной разрешения оригинального будет иметь точно такой же звук, что и "большое", поэтому нет необходимости перекодировать его снова. Очевидно, то же самое относится и к аудиофайлу. Там не должно быть необходимости транскодировать три раза. Кроме того, возможно (и здесь, я не знаю, что будет лучше), я также могу повторно использовать видео поток. Поскольку мне нужно два видео с другим форматом кадров в секунду и пикселем, отличным от исходного, возможно, его стоит перекодировать только один раз (как я уже делал в приведенной выше команде), а затем захватить тот видеопоток, который уже имеет формат пикселей 30 кадров в секунду и yuv420p, и просто сделать его разрешение наполовину.

Я думаю, это будет хорошая идея, чтобы подвести итог ... как я могу цепь (труба?) несколько выходов с avconv, применяя различные параметры для каждого?

С помощью:

  • Ubuntu 12.04 LTS
  • Версия avconv 0.8.5-4:0.8.5-0ubuntu0.12.04.1

1 ответ1

1

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

Например:

  1. перекодировать аудио из оригинального в AAC результат в audio.aac

    avconv -i <input> -c:a libfaac -vn audio.aac
    
  2. перекодировать видео из оригинального в полное разрешение в temp-full-vid.mp4

    avconv -i <input> -c:v libx264 -pix_fmt yuv420p -preset fast -r 30 -an temp-full-vid.mp4
    
  3. перекодировать видео с оригинального на половину результата в temp-half-vid.mp4

    avconv -i <input> -c:v libx264 -pix_fmt yuv420p -preset fast -r 30 -filter:v scale=-1:ih/2 -an temp-half-vid.mp4
    
  4. mux temp-full-vid.mp4 и audio.aac в full.mp4

    avconv -i temp-full-vid.mp4 -i audio.aac -c copy -map 0 -map 1 full.mp4
    
  5. mux temp-half-vid.mp4 и audio.aac в half.mp4

    avconv -i temp-half-vid.mp4 -i audio.aac -c copy -map 0 -map 1 half.mp4
    
  6. удалить temp-full-vid.mp4 и temp-half-vid.mp4

Это оставляет вам 3 файла full.mp4, half.mp4 и audio.aac, которые вы ищете, без лишней повторной перекодировки.

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