For future reference (to myself, for the most part):
ffmpeg -i foo.webm -i foo.en.vtt -i foo.nl.vtt -map 0:v -map 0:a \
-map 1:s -map 2:s -metadata:s:a language=eng -metadata:s:s:0 \
language=eng -metadata:s:s:1 language=nld -c copy -y \
foo.subbed.webm
... is one way to create a single .webm
file from one .webm
input file and
multiple .vtt
files. A little bit of explanation:
- The
-i
arguments pass input files. You can have multiple input files for one output file. They are numbered internally (this is necessary for the-map
and-metadata
options later), starting from 0. The
-map
options take a "mapping". With them, you specify which input streams should go where in the output stream. By default, if you have multiple streams of the same type, ffmpeg will only pick one (the "best" one, whatever that is). The mappings we specify are:-map 0:v
: this means to take the video stream from the first file (this is the default if you do not specify any mapping at all; but if you do specify a mapping, you need to be complete)-map 0:a
: take the audio stream from the first file as well (same as with the video).-map 1:s
: take the subtitle stream from the second (i.e., indexed 1) file.-map 2:s
: take the subtitle stream from the third (i.e., indexed 2) file.
The
-metadata
options set metadata on the output file. Here, we pass:-metadata:s:a language=eng
, to add a 's'tream metadata item on the 'a'udio stream, with namelanguage
and contenteng
. Thelanguage
metadata in ffmpeg is special, in that it gets automatically translated to the correct way of specifying the language in the target container format.-metadata:s:s:0 language=eng
, to add a 's'tream metadata item on the first (indexed 0) 's'ubtitle stream in the output file. This too has the english language set- `-metadata:s:s:1 language=nld', to add a 's'tream metadata item on the second (indexed 1) 's'ubtitle stream in the output file. This has dutch set as the language.
- The
-c copy
option tells ffmpeg to not transcode the input video data, but just to rewrite the container. This works because all input files (WebM video plus VTT subtitles) are valid for WebM. If you do not have an input subtitle format that is valid for WebM, you can instead limit the copy modifier to the video and audio only, allowing ffmpeg to transcode the subtitles. This is done by way of-c:v copy -c:a copy
. - Finally, we pass
-y
to specify that any pre-existing output file should be overwritten, and the name of the output file.
Somebody recently pointed me towards a blog post by a small business owner who proclaimed to the world that using Devuan (and not Debian) is better, because it's cheaper.
Hrm.
Looking at creating Devuan, which means splitting of Debian, economically, you caused approximately infinite cost.
Well, no. I'm immensely grateful to the Devuan developers, because when they announced their fork, all the complaints about systemd on the debian-devel mailinglist ceased to exist. Rather than a cost, that was an immensely gratifying experience, and it made sure that I started reading the debian-devel mailinglist again, which I had stopped for a while before that. Meanwhile, life in Debian went on as it always has.
Debian values choice. Fedora may not be about choice, but Debian is. If there are two ways of doing something, Debian will include all four. If you want to run a Linux system, and you're not sure whether to use systemd, upstart, or something else, then Debian is for you! (well, except if you want to use upstart, which is in jessie but not in stretch). Debian defaults to using systemd, but it doesn't enforce it; and while it may require a bit of manual handholding to make sure that systemd never ever ever ends up on your system, this is essentially not difficult.
you@your-machine:~$ apt install equivs; equivs-control your-sanity; $EDITOR your-sanity
Now make sure that what you get looks something like this (ignoring comments):
Section: misc
Priority: standard
Standards-Version: <whatever was there>
Package: your-sanity
Essential: yes
Conflicts: systemd-sysv
Description: Make sure this system does not install what I don't want
The packages in the Conflicts: header cannot be installed without
very difficult steps, and apt will never offer to install them.
Install it on every system where you don't want to run systemd. You're done, you'll never run systemd. Well, except if someone types the literal phrase "Yes, do as I say!", including punctuation and everything, when asked to do so. If you do that, well, you get to keep both pieces. Also, did you see my pun there? Yes, it's a bit silly, I admit it.
But before you take that step, consider this.
Four years ago, I was an outspoken opponent of systemd. It was a bad idea, I thought. It is not portable. It will cause the death of Debian GNU/kFreeBSD, and a few other things. It is difficult to understand and debug. It comes with a truckload of other things that want to replace the universe. Most of all, their developers had a pretty bad reputation of being, pardon my French, arrogant assholes.
Then, the systemd maintainers filed bug
796633, asking me to provide a systemd
unit for nbd-client
, since it provided an rcS init script (which is
really a very special case), and the compatibility support for that in
systemd was complicated and support for it would be removed from the
systemd side. Additionally, providing a systemd template unit would make
the systemd nbd experience much better, without dropping support for
other init systems (those cases can still use the init script). In order
to develop that, I needed a system to test things on. Since I usually
test things on my laptop, I installed systemd on my laptop. The intent
was to remove it afterwards. However, for various reasons, that never
happened, and I still run systemd as my pid1. Here's why:
- Systemd is much faster. Where my laptop previously took 30 to 45 seconds to boot using sysvinit, it takes less than five. In fact, it took longer for it to do the POST than it took for the system to boot from the time the kernel was loaded. I changed the grub timeout from the default of five seconds to something more reasonable, because I found that five seconds was just ridiculously long if it takes about half that for the rest of the system to boot to a login prompt afterwards.
- Systemd is much more reliable. That is, it will fail more often, but it will reliably fail. When it fails, it will tell you why it failed, so you can figure out what went wrong and fix it, making sure the system never fails again in the same fashion. The unfortunate fact of the matter is that there were many bugs in our init scripts, but they were never discovered and therefore lingered. For instance, you would not know about this race condition between two init scripts, because sysvinit is so dog slow that 99 times out of 100 it would not trigger, and therefore you don't see it. The one time you do see it, something didn't come up, but sysvinit doesn't log about such errors (it expects the init script to do so), so all you can do is go "damn, wtf happened?!?" and manually start things, allowing the bug to remain. These race conditions were much more likely to trigger with systemd, which caused it a lot of grief originally; but really, you should be thankful, because now that all these race conditions have been discovered by way of an init system that is much more verbose about such problems, they have also been fixed, and your sysvinit system is more reliable, too, as a result. There are other similar issues (dependency loops, to name one) that systemd helped fix.
- Systemd is different, and that requires some re-schooling. When I
first moved my laptop to systemd, I remember running into some kind of
issue that I couldn't figure out how to fix. No, I don't remember the
specifics of that issue, but they don't really matter. The point is
this: at first, I thought "this is horrible, you can't debug it, how
can you use such a system". And while it's true that undebuggable
systems are not very useful, the systemd maintainers know this too,
and therefore systemd is debuggable. It's just that you don't debug
it by throwing some imperative init script code through a debugger
(or, worse, something like
sh -x
), because there is no imperative init script code to throw through such a debugger, and therefore that makes little sense. Instead, there is a wealth of different tools to inspect the systemd state, and a lot of documentation on what the different things mean. It takes a while to internalize all that; and if you're not convinced that systemd is a good thing then it may mean some cursing while you're fighting your way through. But in the end, systemd is not more difficult to debug than simple init scripts -- in fact, it sometimes may be easier, because the system is easier to reason about. - While systemd comes with a truckload of extra daemons (systemd-networkd, systemd-resolved, systemd-hostnamed, etc etc etc), the systemd in their name do not imply that they are required by systemd. In fact, it's the other way around: you are required to run systemd if you want to run systemd-networkd (etc), because systemd-networkd (etc) make extensive use of the systemd infrastructure and public APIs; but nothing inside systemd requires that systemd-networkd (etc) are running. In fact, on my personal laptop, beyond systemd and udev themselves, I'm not using anything that gets built from the systemd source.
I'm not saying these reasons are universally true, and I'm not saying that you'll like systemd as much as I have. I am saying, however, that you should give it an honest attempt before you say "I'm not going to run systemd, ever," because you might be surprised by the huge gap of difference between what you expected and what you got. I know I was.
So, given all that, do I think that Devuan is a good idea? It is if you want flamewars. It gives those people who want vilify systemd a place to do that without bothering Debian with their opinion. But beyond that, if you want to run Debian and you don't want to run systemd, you can! Just make sure you choose the right options, and you're done.
All that makes me wonder why today, almost half a year after the initial release of Debian 9.0 "Stretch", Devuan Ascii still hasn't released, and why it took them over two years to release their Devuan Jessie based on Debian Jessie. But maybe that's just me.