Skip to content

Commit

Permalink
Add support for files without audio stream, fix incorrect trim when p…
Browse files Browse the repository at this point in the history
…layback rate and start point is changed
  • Loading branch information
RuurdBijlsma committed Dec 30, 2020
1 parent aa93f8f commit 7a41e48
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 4 deletions.
2 changes: 1 addition & 1 deletion movie-maker/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "movie-maker",
"version": "2.1.4",
"version": "2.1.5",
"description": "Edit videos",
"keywords": [
"Edit",
Expand Down
2 changes: 2 additions & 0 deletions movie-maker/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
<script>
// TODO: Features
// test for bugs
// End time + playback rate change = bug
// support for video without audio stream
// add audio track to video
Expand Down
4 changes: 4 additions & 0 deletions movie-maker/src/js/VideoFile.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ export default class VideoFile extends EventEmitter {
return this._elCache;
}

get hasAudio() {
return this.audioStream !== undefined;
}

get isAudio() {
return this.videoStream.codec_name === 'png' || this.videoStream.codec_name === 'jpg';
}
Expand Down
23 changes: 20 additions & 3 deletions movie-maker/src/plugins/vuex/ffmpeg-module.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,10 @@ export default {
for (let i = 0; i < fragments.length; i++) {
let fragment = fragments[i];
let videoIndex = rootState.videoFiles.indexOf(fragment.video);
let start = fragment.start * fragment.video.duration - getters.earliestStart(fragment.video);
let end = fragment.end * fragment.video.duration;
let earliestStart = getters.earliestStart(fragment.video);
let start = fragment.start * fragment.video.duration - earliestStart;
let end = fragment.end * fragment.video.duration - earliestStart;
console.log({earliestStart, start, end})
filter.push({
filter: parseFilter([
['trim', `start=${start}:end=${end}`],
Expand All @@ -48,6 +50,19 @@ export default {
inputs: `[${videoIndex}:v]`,
outputs: 'v' + i,
});

if (!fragment.video.hasAudio) {
let duration = (end - start) / fragment.playbackRate;
console.log("DURATION", duration)
filter.push({
filter: 'aevalsrc',
options: {exprs: '0', duration},
outputs: 'a' + i,
})
continue;
}
// Audio filters:

let tempoCommands = [];
let playbackRate = fragment.playbackRate;
let minTempo = 0.5;
Expand Down Expand Up @@ -218,7 +233,9 @@ export default {
ffmpeg()
.input(Utils.fixPath(filePath))
.complexFilter(filter, 'out')
.on('error', (err, stdout, stderr) => reject({err, stdout, stderr}))
.on('error', (err, stdout, stderr) => {
console.warn(`Error processing audio wave for ${filePath}`)
})
.on('stderr', line => {
line = line.trim();
if (line.startsWith('LRA low:'))
Expand Down

0 comments on commit 7a41e48

Please sign in to comment.