
Мне нужно объединить два разных видеофайла, и я используюLosslessCutдля этой задачи. Но там написано, что файлы должны иметь одинаковые кодеки, размерность, частоту кадров.
Источник — mkv V_MPEG4/ISO/AVC с Vorbis, назначение — avi xvid с ac3.
- Полные параметры обоих файлов с использованием кодировки ffmpeg
Format : AVI
Format/Info : Audio Video Interleave
File size : 6.20 MiB
Duration : 46 s 280 ms
Overall bit rate : 1 124 kb/s
Writing application : Lavf58.45.100
Video
ID : 0
Format : MPEG-4 Visual
Format profile : Advanced Simple@L5
Format settings : BVOP2
Format settings, BVOP : 2
Format settings, QPel : No
Format settings, GMC : No warppoints
Format settings, Matrix : Default (MPEG)
Muxing mode : Packed bitstream
Codec ID : XVID
Codec ID/Hint : XviD
Duration : 46 s 280 ms
Bit rate : 921 kb/s
Width : 576 pixels
Height : 432 pixels
Display aspect ratio : 3:2
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Compression mode : Lossy
Bits/(Pixel*Frame) : 0.148
Stream size : 5.08 MiB (82%)
Writing library : XviD 64
Audio
ID : 1
Format : AC-3
Format/Info : Audio Coding 3
Commercial name : Dolby Digital
Codec ID : 2000
Duration : 46 s 254 ms
Bit rate mode : Constant
Bit rate : 192 kb/s
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 44.1 kHz
Frame rate : 28.711 FPS (1536 SPF)
Bit depth : 16 bits
Compression mode : Lossy
Stream size : 1.06 MiB (17%)
Alignment : Aligned on interleaves
Interleave, duration : 35 ms (0.87 video frame)
Interleave, preload duration : 347 ms
Service kind : Complete Main
- Параметры файла, который я хочу перекодировать/кодировать (чтобы параметры были показаны выше):
Format : Matroska
Format version : Version 4
File size : 2.36 MiB
Duration : 27 s 999 ms
Overall bit rate mode : Variable
Overall bit rate : 706 kb/s
Writing application : Lavf58.45.100
Writing library : Lavf58.45.100
ErrorDetectionType : Per level 1
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : [email protected]
Format settings : CABAC / 4 Ref Frames
Format settings, CABAC : Yes
Format settings, Reference frames : 4 frames
Codec ID : V_MPEG4/ISO/AVC
Duration : 27 s 933 ms
Bit rate : 564 kb/s
Width : 854 pixels
Height : 480 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 30.303 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.045
Stream size : 1.88 MiB (80%)
Default : Yes
Forced : No
Color range : Limited
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Audio
ID : 2
Format : Vorbis
Format settings, Floor : 1
Codec ID : A_VORBIS
Duration : 27 s 837 ms
Bit rate mode : Variable
Bit rate : 128 kb/s
Channel(s) : 2 channels
Sampling rate : 48.0 kHz
Compression mode : Lossy
Delay relative to video : -52 ms
Stream size : 435 KiB (18%)
Writing application : Lavc58.91.100
Writing library : libVorbis (Reducing Environment) (20200704 (Reducing Environment))
Default : Yes
Forced : No
Как мне извлечь все данные из конечного файла и ввести их в качестве параметра в команду кодирования исходного файла FFmpeg? Я искал, есть ли скрипт для этого, но не могу найти.
решение1
Это придется делать вручную.
ffmpeg -i input.mkv -c:v libxvid -vf scale=-2:432 -r 25 -profile:v 0 -level 5 -vtag XVID -mpeg_quant 1 -b:v 921k -bf 2 -c:a ac3 -ac 2 -ar 44100 output.avi
решение2
Я пока не нашел хорошего решения, ноесть скрипт bash для Linuxпопытаться автоматизировать задачу поиска различий в видеофрагментах, подлежащих объединению, и предложить команды для исправления различий.
решение3
Это близко к: «масштабировать одно видео так, чтобы оно соответствовало другому, не определяя заранее размеры», разместить два видео рядом и масштабировать второе видео так, чтобы оно соответствовало первому:
ffmpeg -i vid1.mp4 -i vid2.mp4 -filter_complex "[1:v][0:v]scale2ref=oh*mdar:h=in_h:[v1][v0];[v0][v1]hstack[vo]" -map "[vo]" ./output-video.mp4