mirror of https://github.com/mifi/lossless-cut
- Icon
- Bundle ffmpeg
- Fix menus on windows
- fs-methods seem to hang on windows, so exec instead
Resources:
https://discuss.atom.io/t/information-about-bundled-ffmpeg/28456/6
27730fd269/app/src/scripts/mp4-to-gif.js
https://github.com/orionhealth/electron-packager-plugin-non-proprietary-codecs-ffmpeg
https://github.com/konsumer/easy-ffmpeg
https://github.com/eugeneware/ffmpeg-static
pull/13/head
parent
cce542af41
commit
ec875b5c65
@ -0,0 +1,21 @@
|
|||||||
|
## TODO / ideas
|
||||||
|
- Visual feedback on button presses
|
||||||
|
- support for previewing other formats by streaming through ffmpeg?
|
||||||
|
- Slow scrub with modifier key
|
||||||
|
- show frame number (approx?)
|
||||||
|
- ffprobe show keyframes (pprobe -of json -select_streams v -show_frames file.mp4)
|
||||||
|
- cutting out the commercials in a video file while saving the rest to a single file?
|
||||||
|
- With the GOP structure of h.264 you could run into some pretty nasty playback issues without re-encoding if you cut the wrong frames out.
|
||||||
|
- Shortcut Cmd+o also triggers o (cut end)
|
||||||
|
- implement electron app event "open-file"
|
||||||
|
- Travis github deploys https://docs.travis-ci.com/user/deployment
|
||||||
|
- react video ref="video" this.refs.video.play()
|
||||||
|
- A dedicated "Options" menu where the users can set a default output folder for captured frames and for cut videos will also be handy, now lossless-cut uses the input folder.
|
||||||
|
|
||||||
|
## Links
|
||||||
|
- http://apple.stackexchange.com/questions/117306/what-options-are-available-to-losslessly-trim-mp4-m4v-video-on-10-8-or-above
|
||||||
|
- http://superuser.com/questions/554620/how-to-get-time-stamp-of-closest-keyframe-before-a-given-timestamp-with-ffmpeg/554679#554679
|
||||||
|
- http://www.fame-ring.com/smart_cutter.html
|
||||||
|
- http://electron.atom.io/apps/
|
||||||
|
- https://github.com/electron/electron/blob/master/docs/api/file-object.md
|
||||||
|
- https://github.com/electron/electron/issues/2538
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 220 KiB |
@ -0,0 +1,15 @@
|
|||||||
|
ffmpeg_linux_ia32=https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-32bit-static.tar.xz
|
||||||
|
ffmpeg_linux_x64=https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
|
||||||
|
ffmpeg_darwin_x64=http://evermeet.cx/ffmpeg/ffmpeg-3.2.7z
|
||||||
|
ffmpeg_win32_ia32=https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-3.1.5-win32-static.zip
|
||||||
|
ffmpeg_win32_x64=https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-3.1.5-win64-static.zip
|
||||||
|
ffprobe_darwin_x64=http://evermeet.cx/ffmpeg/ffprobe-3.2.7z
|
||||||
|
|
||||||
|
mkdir -p ffmpeg-tmp/archives &&
|
||||||
|
(cd ffmpeg-tmp/archives &&
|
||||||
|
wget -O ffmpeg_linux_ia32.tar.xz "${ffmpeg_linux_ia32}" &&
|
||||||
|
wget -O ffmpeg_linux_x64.tar.xz "${ffmpeg_linux_x64}" &&
|
||||||
|
wget -O ffmpeg_darwin_x64.7z "${ffmpeg_darwin_x64}" &&
|
||||||
|
wget -O ffmpeg_win32_ia32.zip "${ffmpeg_win32_ia32}" &&
|
||||||
|
wget -O ffmpeg_win32_x64.zip "${ffmpeg_win32_x64}" &&
|
||||||
|
wget -O ffprobe_darwin_x64.7z "${ffprobe_darwin_x64}")
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
(
|
||||||
|
mkdir -p ffmpeg-tmp/extracted &&
|
||||||
|
cd ffmpeg-tmp/extracted &&
|
||||||
|
(mkdir -p linux_ia32 && cd linux_ia32 &&
|
||||||
|
7z x ../../archives/ffmpeg_linux_ia32.tar.xz && tar xvfp ffmpeg_linux_ia32.tar) &&
|
||||||
|
(mkdir -p linux_x64 && cd linux_x64 &&
|
||||||
|
7z x ../../archives/ffmpeg_linux_x64.tar.xz && tar xvfp ffmpeg_linux_x64.tar) &&
|
||||||
|
(mkdir -p win32_ia32 && cd win32_ia32 &&
|
||||||
|
unzip ../../archives/ffmpeg_win32_ia32.zip) &&
|
||||||
|
(mkdir -p win32_x64 && cd win32_x64 &&
|
||||||
|
unzip ../../archives/ffmpeg_win32_x64.zip) &&
|
||||||
|
(mkdir -p darwin_x64 && cd darwin_x64 &&
|
||||||
|
7z x ../../archives/ffmpeg_darwin_x64.7z &&
|
||||||
|
7z x ../../archives/ffprobe_darwin_x64.7z)
|
||||||
|
) &&
|
||||||
|
cd ffmpeg-tmp &&
|
||||||
|
mkdir -p binaries/linux_ia32 &&
|
||||||
|
mkdir -p binaries/linux_x64 &&
|
||||||
|
mkdir -p binaries/win32_ia32 &&
|
||||||
|
mkdir -p binaries/win32_x64 &&
|
||||||
|
mkdir -p binaries/darwin_x64 &&
|
||||||
|
mv extracted/linux_ia32/ffmpeg-3.2-32bit-static/ffmpeg binaries/linux_ia32 &&
|
||||||
|
mv extracted/linux_ia32/ffmpeg-3.2-32bit-static/ffprobe binaries/linux_ia32 &&
|
||||||
|
mv extracted/linux_x64/ffmpeg-3.2-64bit-static/ffmpeg binaries/linux_x64 &&
|
||||||
|
mv extracted/linux_x64/ffmpeg-3.2-64bit-static/ffprobe binaries/linux_x64 &&
|
||||||
|
mv extracted/win32_ia32/ffmpeg-3.1.5-win32-static/bin/ffmpeg.exe binaries/win32_ia32 &&
|
||||||
|
mv extracted/win32_ia32/ffmpeg-3.1.5-win32-static/bin/ffprobe.exe binaries/win32_ia32 &&
|
||||||
|
mv extracted/win32_x64/ffmpeg-3.1.5-win64-static/bin/ffmpeg.exe binaries/win32_x64 &&
|
||||||
|
mv extracted/win32_x64/ffmpeg-3.1.5-win64-static/bin/ffprobe.exe binaries/win32_x64 &&
|
||||||
|
mv extracted/darwin_x64/ffmpeg binaries/darwin_x64 &&
|
||||||
|
mv extracted/darwin_x64/ffprobe binaries/darwin_x64 &&
|
||||||
|
echo Done
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<circle style="fill:#14B0BF;" cx="256" cy="256" r="256"/>
|
||||||
|
<path style="fill:#3387B5;" d="M437.018,437.018c59.699-59.699,83.722-141.548,72.12-219.09L401.833,109.86L96.691,163.666
|
||||||
|
l8.771,49.731l2.463-0.435l0.077,0.435h-2.54v168.397c0,6.38,3.036,12.032,7.67,15.77c0.916,1.137,112.067,112.067,112.579,112.579
|
||||||
|
C300.913,519.05,379.31,494.725,437.018,437.018z"/>
|
||||||
|
<path style="fill:#0F303F;" d="M415.309,381.788c0,11.192-9.16,20.352-20.352,20.352H125.809c-11.192,0-20.352-9.16-20.352-20.352
|
||||||
|
V233.743c0-11.192,9.16-20.352,20.352-20.352h269.148c11.192,0,20.352,9.16,20.352,20.352V381.788z"/>
|
||||||
|
<rect x="105.462" y="213.396" style="fill:#FFFFFF;" width="309.862" height="50.499"/>
|
||||||
|
<path style="fill:#0F303F;" d="M156.001,220.314l-36.874,37.366h37.366l36.874-37.366H156.001z M311.322,220.314l-36.874,37.366
|
||||||
|
h37.366l36.874-37.366H311.322z M207.775,220.314L170.9,257.679h37.366l36.874-37.366H207.775z M259.548,220.314l-36.874,37.366
|
||||||
|
h37.366l36.874-37.366H259.548z M363.095,220.314l-36.874,37.366h37.366l36.874-37.366H363.095z M414.868,220.314l-36.874,37.366
|
||||||
|
h37.315v-37.366H414.868z M105.462,220.314v37.366h0.246l36.874-37.366H105.462z"/>
|
||||||
|
|
||||||
|
<rect x="98.721" y="136.353" transform="matrix(0.9848 -0.1736 0.1736 0.9848 -24.203 46.4881)" style="fill:#FFFFFF;" width="309.857" height="50.498"/>
|
||||||
|
<path style="fill:#0F303F;" d="M316.467,131.937l42.803,30.397l36.797-6.487l-42.803-30.397L316.467,131.937z M163.502,158.904
|
||||||
|
l42.803,30.397l36.797-6.487L200.3,152.417L163.502,158.904z M265.477,140.928l42.803,30.397l36.797-6.487l-42.803-30.397
|
||||||
|
L265.477,140.928z M214.492,149.919l42.803,30.397l36.797-6.487l-42.803-30.397L214.492,149.919z M112.517,167.895l42.803,30.397
|
||||||
|
l36.797-6.487l-42.803-30.397L112.517,167.895z M97.894,170.476l6.487,36.797l36.746-6.482l-42.803-30.397L97.894,170.476z
|
||||||
|
M366.479,123.116l42.803,30.397l0.241-0.041l-6.487-36.797L366.479,123.116z"/>
|
||||||
|
<path style="fill:#FDC00F;" d="M394.634,317.379h-0.072v-36.552h-269.44v103.235h269.44v-62.172h0.072V317.379z M390.497,284.897
|
||||||
|
v32.481h-101.13v-32.481L390.497,284.897L390.497,284.897z M284.856,284.897v32.481H177.05v-32.481L284.856,284.897
|
||||||
|
L284.856,284.897z M129.193,379.991v-95.094h43.341v95.094H129.193z M177.05,379.991v-58.102h107.807v58.102L177.05,379.991
|
||||||
|
L177.05,379.991z M390.497,379.991h-101.13v-58.102h101.125v58.102H390.497z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
@ -0,0 +1,2 @@
|
|||||||
|
Fixtures are stored separately:
|
||||||
|
https://github.com/mifi/lossless-cut-fixtures
|
||||||
@ -0,0 +1 @@
|
|||||||
|
for f in sample-videos/*; do echo -n "$f: "; ffprobe -show_format -of json -i "$f" | json format.format_name; done 2> /dev/null
|
||||||
Loading…
Reference in New Issue