FFmpeg: повернуть и вставить горизонтальное видео

391
Sam T

У меня есть портретное видео (в соотношении 9:16), снятое на телефон, и я хотел бы преобразовать его в пейзаж (16: 9) с черным или боковым отступом или, в идеале, с размытым отступом (но не слишком) важный).

Есть много вопросов на SE по этому поводу, а также учебники на других сайтах, но я не смог сделать ни одну из этих работ. Они, как правило, либо вообще не работают, либо выдают ошибку «нет такого фильтра», а затем перечисляют ввод команды, например

ffmpeg -i MC_orig.mp4 -filter_complex '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' outputfile.mp4

выдает ошибку

[AVFilterGraph @ 000001bc89ea28c0] No such filter: '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' Error initializing complex filters. Invalid argument

Все найденные мной уроки / вопросы по SE предполагают схожий ввод с приведенным выше, и все они дают в основном одинаковую ошибку.

Мой полный вывод на консоль (Windows 10, с использованием командной строки или Cmder), включая сведения о версии FFmpeg, которую я использую, следующий.

D:\Users\Sam\Videos\FFMPEG\bin>ffmpeg -i MC_orig.mp4 -filter_complex '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' outputfile.mp4 ffmpeg version N-91930-g0caa33c60b Copyright (c) 2000-2018 the FFmpeg developers built with gcc 8.2.1 (GCC) 20180813 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth libavutil 56. 19.101 / 56. 19.101 libavcodec 58. 30.100 / 58. 30.100 libavformat 58. 18.100 / 58. 18.100 libavdevice 58. 4.103 / 58. 4.103 libavfilter 7. 29.100 / 7. 29.100 libswscale 5. 2.100 / 5. 2.100 libswresample 3. 2.100 / 3. 2.100 libpostproc 55. 2.100 / 55. 2.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'MC_orig.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2018-09-09T18:07:24.000000Z com.android.version: 7.0 Duration: 00:07:12.03, start: 0.000000, bitrate: 12081 kb/s Stream #0:0(eng): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 11950 kb/s, 24.94 fps, 24.92 tbr, 90k tbn, 300 tbc (default) Metadata: rotate : 90 creation_time : 2018-09-09T18:07:24.000000Z handler_name : VideoHandle Side data: displaymatrix: rotation of -90.00 degrees Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default) Metadata: creation_time : 2018-09-09T18:07:24.000000Z handler_name : SoundHandle [AVFilterGraph @ 000001bc89ea28c0] No such filter: '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' Error initializing complex filters. Invalid argument

1

1 ответ на вопрос

2
Gyan

В Windows аргументы должны быть заключены в двойные кавычки, поэтому

-filter_complex "[0:v]scale=ih*16/9:-1...crop=h=iw*9/16"

Аргументы внутри могут быть заключены в одинарные кавычки, как это

-vf "drawtext=text='Hello World':fontcolor=white" 
Спасибо, это сейчас работает. Это старый синтаксис, чтобы использовать одинарные кавычки? Только во всех уроках, которые я видел, были одинарные кавычки. (На самом деле, у некоторых были удвоения, но они тоже терпели неудачу, но по другой причине, которую я сейчас забываю!) В любом случае, она работает, и я обновлю ее, когда это будет сделано! Sam T 5 лет назад 0
Использование заключающих в кавычки относится к оболочке, а не к ffmpeg. В Linux / OSX одинарные кавычки - это нормально. Gyan 5 лет назад 0
Ах, я вижу, спасибо за это Sam T 5 лет назад 0
Так что теперь он закончил и дает желаемый результат. Однако затем я хочу изменить его с `mp4` на` avi`. Я сделал это с предыдущим файлом, используя код `ffmpeg -i MC_orig.mp4 -vcodec copy out.avi`, и он работал нормально. Однако, если я делаю это, вводя видео, которое я только что создал с вашей помощью, то ffmpeg запускается, но видео не работает (звук работает, но видео нет) Sam T 5 лет назад 0
(Я понимаю, что обычно можно задать это как отдельный вопрос, но причина, по которой я добавляю его здесь, заключается в том, что я * смог * сделать это ранее, но с * этим видео * у меня возникла проблема.) Sam T 5 лет назад 0
Поделитесь выводом `ffmpeg -i outputfile.mp4` Gyan 5 лет назад 0
Поскольку он довольно длинный, я добавил его в исходное сообщение. Спасибо за твою помощь Sam T 5 лет назад 0
Ваше выходное разрешение выше, чем может вместить декодер H264 большинства плееров. VLC должен по-прежнему воспроизводить видео, но для широкой совместимости вам необходимо уменьшить его до ширины 1920 или ниже. Кроме того, хранение H264 с B-кадрами в AVI является хакерским и не очень рекомендуется. Добавьте `-bf 0`, чтобы отключить их. Gyan 5 лет назад 0
Должен признаться, я не знаю, что такое B-кадр. Единственная причина, по которой я пытаюсь конвертировать, заключается в том, что у меня есть видео, которое я хочу конкатернировать, снятое с другой камеры, и это в формате AVI (это первая часть речи на одной камере, а вторая половина на видео с телефона) - видео AVI - это видео лучшего качества (с правильной видеокамеры), поэтому я подумал, что лучше всего конвертировать видео с камеры телефона в AVI, а затем конвертировать. \\ Похоже ли это на то, что вам нужно делать, и (если так) можете ли вы посоветовать мне, какой код я должен использовать для преобразования из MP4 в AVI? Спасибо Sam T 5 лет назад 0
Это теперь перешло в отдельный вопрос. Сделайте один с журналами обоих файлов. Gyan 5 лет назад 0
Я на самом деле исправил свою проблему с помощью ручного тормоза в дополнение к ffmpeg, и поэтому откатил вопрос, чтобы включить только исходную проблему. Спасибо за помощь! Sam T 5 лет назад 0

Похожие вопросы