Итак, моя программа настроена так, чтобы загружать видео и передавать его в файл. Это видео .mp4 и .mov.
Проблема в том, что файлы .mov не работают, и я думаю, что это просто способ потоковой передачи файла. Но я не уверен. Потому что .mp4 файлы работают без ошибок. Но когда я использую файлы .mov, я получаю сообщение об ошибке
Ошибки Powershell: [mov, mp4, m4a, 3gp, 3g2, mj2 @ 000002707b9cb700] moov атом не найден
Что происходит из этого сценария PowerShell:
ffmpeg -i $Args[0] -vcodec copy -acodec copy -movflags +faststart $Args[1]
Код, который вызывает этот скрипт, выглядит следующим образом:
streamVideos_PROMISES.push(
axios({
method: "get",
url: video.url,
responseType: "stream"
})
);
}
});
Promise.all(streamVideos_PROMISES)
.then(function(response) {
response.map(response_item => {
let tempFileName = new Date().valueOf();
let videoType = response_item.headers["content-type"].split("/")[1];
if (videoType === "quicktime") videoType = "mov"; <---Maybe the issue?
const file = fs.createWriteStream(
`./cache/videos/${tempFileName + "."}${videoType}`
);
var spawn = require("child_process").spawn,
child;
response_item.data.pipe(file);
child = spawn("powershell.exe", [
"./scripts/ffmpeg_convert.ps1",
`./cache/videos/${tempFileName + "."}${videoType}`,
` ./cache/converted_videos/${tempFileName + "."}${videoType}`
]);
child.stdout.on("data", function(data) {
console.log("Powershell Data: " + data);
});
child.stderr.on("data", function(data) {
console.log("Powershell Errors: " + data);
});
child.on("exit", function() {
console.log("Finished converting thumbnails");
return thumbsupply.generateThumbnail(
`./cache/converted_videos/${tempFileName + "."}${videoType}`,
{
mimetype: response_item.headers["content-type"]
}
);
});
child.stdin.end(); //end input
});
})
.catch(err => {
console.log(err);
res.status(500).json({ Error: "Could not generate thumbnail" });
});
примечание
response_item.headers["content-type"].split("/")
для .mov - это быстрое время, поэтому я предположил, что могу поменять местами расширения ... Что, вероятно, неправильно.
Редактировать
Поэтому я вручную набрал $args
следующим образом:
ffmpeg -i "./cache/videos/1556897345129.mov" -vcodec copy -acodec copy -movflags +faststart "./cache/converted_videos/are_you_kidding_me.mov"
и это работает.
Редактировать 2
child = spawn("powershell.exe", [
"./scripts/ffmpeg_convert.ps1",
"./cache/videos/1556897345129.mov", <-- Using the string literal works.
` ./cache/converted_videos/${tempFileName + "."}${videoType}`
]);