Как я могу перекодировать видео, чтобы точно соответствовать кодеку другого?

Когда я в отпуске, я обычно использую нашу видеокамеру для записи видео. Поскольку все они имеют одинаковый формат, я могу использовать ffmpeg, чтобы объединить их в одно большое гладкое видео без перекодирования.

Однако иногда я буду использовать телефон или другую камеру для записи видео (если в видеокамере не хватило места / батареи или ее оставили в отеле).

Я хотел бы определить кодек, частоту кадров и т. Д., Используемые моей видеокамерой, и использовать эти параметры для преобразования видеофайлов в тот же формат. Таким образом, я смогу объединить все видео без перекодирования видео с видеокамеры.

Используя ffprobe, я обнаружил, что моя видеокамера имеет следующую кодировку:

  Input #0, mpegts, from 'camcorderfile.MTS':
  Duration: 00:00:09.54, start: 1.936367, bitrate: 24761 kb/s
  Program 1 
    Stream #0:0[0x1011]: Video: h264 (High) (HDPR / 0x52504448), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 256 kb/s
    Stream #0:2[0x1200]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090), 1920x1080

Кодировка телефона (iPhone 5s):

  Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'mov.MOV':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2017-01-02T03:04:05.000000Z
    com.apple.quicktime.location.ISO6709: +12.3456-789.0123+456.789/
    com.apple.quicktime.make: Apple
    com.apple.quicktime.model: iPhone 5s
    com.apple.quicktime.software: 10.2.1
    com.apple.quicktime.creationdate: 2017-01-02T03:04:05-0700
  Duration: 00:00:14.38, start: 0.000000, bitrate: 11940 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 11865 kb/s, 29.98 fps, 29.97 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      creation_time   : 2017-01-02T03:04:05.000000Z
      handler_name    : Core Media Data Handler
      encoder         : H.264
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s (default)
    Metadata:
      creation_time   : 2017-01-02T03:04:05.000000Z
      handler_name    : Core Media Data Handler
    Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2017-01-02T03:04:05.000000Z
      handler_name    : Core Media Data Handler
    Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2017-01-02T03:04:05.000000Z
      handler_name    : Core Media Data Handler

Я предполагаю, что ffmpeg автоматически примет любой приемлемый формат видео, и мне нужно только выяснить настройки вывода. Я думаю, что мне нужно использовать -s 1920x1080 а также -pix_fmt yuv420p для вывода, но какие еще флаги мне нужны, чтобы преобразовать видео телефона в ту же кодировку, что и видео с видеокамеры?

Могу ли я получить некоторые указания относительно того, как я могу преобразовать вывод ffprobe во флаги, которые мне нужно дать ffmpeg?

Редактировать: добавлен полный ввод № 0 для обоих медиа-файлов.

1 ответ

Ffmpeg имеет фильтр для использования с concat это выглядит примерно так (скопировано с https://trac.ffmpeg.org/wiki/Concatenate):

ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \
-filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mkv

Ссылка на сайт объясняет, как все это работает. С этой функцией вам не нужно беспокоиться о битрейте. Программа настраивает его автоматически. В старых версиях ffmpeg возникли проблемы с сопоставлением битрейта, но недавно я использовал его для объединения видео и анимации, и он работал нормально. Не уверен, что это будет работать для частоты кадров, хотя.

Другие вопросы по тегам