2016-04-12 11 views
1

я нашел, как конвертировать MP3 файлы в MP4s, используя приведенный ниже код в пакетном файле:Ошибка при попытке конвертировать mp3 (и изображения) в mp4 с помощью FFmpeg ПРОСТРАНСТВА В ИМЕНИ

for %%f in (*.mp3) do ffmpeg -i %%f -loop 1 -i image.jpg -c:a copy -c:v libx264 -shortest %%~nf.mp4 

Он отлично работает, если только В FILENAME есть пробелы: FILENAME.mp3 отлично работает, но FILE NAME.mp3 дает ошибку «Нет такого файла или каталога».

Я попытался вставить «delims =» до и после %% f, но он продолжает говорить, что это неожиданно. Есть идеи?

Спасибо.

+0

поставить кавычки вокруг имен файлов –

ответ

1
for %%f in (*.mp3) do ffmpeg -i "%%f" -loop 1 -i image.jpg -c:a copy -c:v libx264 -shortest "%%~nf.mp4" 

В общем "quote filenames that may contain spaces"

"delims=" могут быть использованы только с for /f как в

for /f "delims=" %%f in (... 

Где заманчивой из for является в первую очередь читать строки из файлов.

'dir /b /a-d filemask' - включая котировки для предоставления for /f с указанием имен файлов для обработки. Значение /b означает «базовая форма» (только имена) и /a-d означает «нет каталогов».

Если ваши имена файлов содержат разделители, такие как пробелы, используйте `` delims = ", иначе неявное« tokens = 1 »усекает значение, применяемое в первом разделителе.

+0

Рассмотрите возможность добавления '-pix_fmt yuv420p' в качестве опции вывода. В противном случае на выходе может использоваться схема субсэмплирования цветности, которую не могут обрабатывать немые игроки. – LordNeckbeard

0

Спасибо всем за вашу помощь, цитаты - вот что сделал трюк.

Я изменил это:

for %%f in (*.mp3) do ffmpeg -i %%f -loop 1 -i image.jpg -c:a copy -c:v libx264 -shortest %%~nf.mp4 

Для этого:

for %%f in ("*.mp3") do ffmpeg -i "%%f" -loop 1 -i image.jpg -c:a copy -c:v libx264 -flags global_header -pix_fmt yuv420p -shortest "%%~nf.mp4" 

FYI: добавлены дополнительные переключатели, но не имеет ничего общего с пробелами, вызывающих вопросы:

-flags global_header -pix_fmt yuv420p