Я не могу прослушать звук m4a DASH, загруженный с YouTube через youtube-dl на Winamp. Есть ли в youtube-dl возможность удалить аудио часть DASH файла m4a и загрузить / сохранить ее как m4a (AAC LC) без потери качества? До сих пор я использую ffmpeg -i input.m4a -vn -acodec copy output.m4a
для преобразования каждого файла, чтобы он правильно воспроизводился в Winamp.
3 ответа
Нет, вам нужен второй шаг преобразования.
Проблема заключается в том, что для YouTube DASH ftyp
контейнера MP4 имеет "главную марку", установленную на dash
вместо m4a
. Это правильный подход для потоковой передачи DASH, но Winamp слишком стар, чтобы его распознавать (как и многие другие программы).
Теперь, что было бы разумным предложением, это создать запрос функции для youtube-dl, чтобы добавить поддержку пост-обработки для ffmpeg, чтобы преобразовать главную марку контейнера MP4 во что-то более совместимое. Но на данный момент такой вещи не существует.
Или подайте отчет об ошибке для Winamp, чтобы включить поддержку декодирования для брендов dash
. Так как он, скорее всего, будет полагаться на сторонний плагин декодера, это, вероятно, также означает создание отчета об ошибке где-то еще.
youtube-dl 2015.01.23.4 и новее автоматически исправит заголовок файла m4a, если в системе присутствует ffmpeg.
Источник: youtube-dl: Файлы m4a Youtube, загруженные с помощью --extract-audio, не могут воспроизводиться на некоторых проигрывателях
Все, что вам нужно сделать, это добавить путь к каталогу, содержащему двоичный файл ffmpeg, в вашу системную переменную пути (как в Windows 7):
Или используйте аргумент командной строки --ffmpeg-location <path to ffmpeg binary or its containing directory>
при вызове youtube-dl, чтобы разрешить youtube-dl через ffmpeg автоматически исправить это.
Я взял на себя смелость использовать вашу команду ffmpeg
и вот что я получил: yt "My Youtube File.mp4"
Файл yt.bat
помещенный в system32, содержащий:
@echo off
mv %1 "_%~n1"
ffmpeg -i "_%~n1" -vn -c:a copy "%~n1.m4a"
rm "_%~n1"
* автоматически переименовывается в m4a
, который можно изменить в коде.
** он должен быть через временный файл и затем использовать rm, mv, в противном случае файл и имя файла будут повреждены.